Otra opción para el manejo de la memoria
es usar una forma de liberar al programador de la tarea del
control de
las tablas en expansión y contracción, de la
misma forma que la memoria virtual
elimina la preocupación por organizar el programa en una
serie de proyectos.
Esto se puede lograr dotando a la máquina de
varios espacios independientes de direcciones llamados
segmentos. Cada segmento tiene una serie lineal de direcciones,
desde 0 hasta cierto máximo. La longitud de cada
segmento puede variar de 0 hasta un máximo permitido.
Los distintos segmentos pueden tener y de hecho tienen por lo
general, longitudes distintas. Además, la longitud de un
segmento puede variar durante la ejecución. La longitud
de un segmento de la pila puede crecer si algo entra a la pila
y decrecer si algo sale de ella.
Puesto que cada segmento constituye un espacio
independiente de direcciones, los distintos segmentos pueden
crecer o reducirse en forma independiente sin afectar a los
demás. En la figura 13 podemos ver una lista de
comparación entre la paginación y la segmentación.
La segmentación también facilita el
uso de procedimientos
o datos
compartidos entre varios procesos. Un
ejemplo común son las bibliotecas
compartidas (Shared DLL’s). Es frecuente que las
estaciones de trabajo modernas que ejecutan sistemas
avanzados, con ventanas, tengan bibliotecas
gráficas de tamaño muy grande que
se compilan casi en todos los programas. En
un sistema
segmentado, la biblioteca
gráfica se puede colocar en un segmento y compartirse
entre varios procesos,
sin necesidad de tenerla en el espacio de direcciones de cada
proceso.
Aunque también es posible tener bibliotecas
compartidas sin los sistemas con
paginación pura, es mucho más complejo. De hecho,
estos sistemas simulan la segmentación.
Segmentación pura
La implantación de la segmentación
difiere del caso de la paginación en un sentido
esencial: las páginas tienen un tamaño fijo y los
segmentos no. La figura 14 muestra un
ejemplo de memoria
física
que contiene al principio 5 segmentos. Consideremos que el
segmento 1 se elimina y su lugar se ocupa por el segmento 7,
que es menor. El área que queda entre el segmento 7 y el
2 es un hueco. Luego, el segmento 4 se reemplaza por el
segmento 5 y el segmento 3 es reemplazado por el segmento 6.
Después de que el sistema
esté en ejecución durante cierto tiempo,
la memoria
quedará dividida en varios bloques, algunos con
segmentos y otros con huecos.
Considerando | Paginación | Segmentación |
¿Necesita saber el programador si | No | Sí |
¿Cuántos espacios lineales de | 1 | Muchos |
¿Puede el espacio total de direcciones | Sí | Sí |
¿Pueden distinguirse los procedimientos y los datos, además de protegerse en | No | Sí |
¿Pueden adecuarse con facilidad las | No | Sí |
¿Se facilita el uso de procedimientos | No | Sí |
¿Para qué se inventó esta | Para obtener un gran espacio lineal de | Para permitir que los programas y datos fueran separados en |
Fig. 13. Comparación de paginación y
segmentación.
Este fenómeno de fragmentación externa o
checkboarding, desperdicia la memoria correspondiente a
los huecos, pero es fácilmente corregido mediante el uso
de la compactación. De esta forma los huecos son
unificados, generando así un hueco de tamaño
suficiente para albergar algún otro segmento
más.
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Fig. 14. Desarrollo
de fragmentación externa y su corrección mediante
compactación.
Segmentación con paginación:
MULTICS
En el sistema MULTICS, una dirección lógica está formada por un
número de segmento de 18-bit y un offset de 16 bit.
Aunque este esquema crea un espacio de dirección de 34-bit, la sobrecarga en la
tabla de segmentos es tolerable; solo se requiere de las
suficientes localidades en la tabla de segmentos como haya
segmentos, puesto que no debe haber localidades
vacías.
Sin embargo, con segmentos de palabras de 64K, es
donde cada una consiste de 36 bits, el tamaño promedio
de segmento puede ser grande y se podría presentar un
problema de fragmentación externa. Aunque no lo fuera,
el tiempo de
búsqueda para ubicar un segmento, usando primer ajuste o
mejor ajuste, puede ser prolongado. Lo que puede causar
desperdicio de memoria debido a la fragmentación
externa, o desperdicio de tiempo por las largas
búsquedas o ambas.
La solución al problema es paginar los
segmentos. La paginación elimina la fragmentación
externa y convierte el problema de ubicación en algo
trivial: cualquier frame desocupado puede ser usado para una
página deseada. En MULTICS, cada página consiste
de palabras de 1K. En consecuencia, el offset del segmento (16
bits) es dividido en un número de página de 6 bit
y un offset de página de 10 bit. El número de
página se indexa en la tabla de páginas para
obtener el número de frame. Finalmente, el número
de frame es combinado con el offset de página para
formar una dirección física. El esquema de esto
se muestra en la
figura 15.
Para ver el
gráfico seleccione la opción "Descargar" del
menú superior
Fig. 15. Segmentación paginada en el GE 645
(MULTICS)
Ahora se debe de tener una tabla de páginas
individual para cada segmento. Sin embargo, dado que cada
segmento está limitado en tamaño por su
ubicación en la tabla de segmentos, la tabla de
páginas no tiene que ser de tamaño completo, solo
requiere de los espacios que son realmente
necesarios.
Al igual que en la paginación, la última
página de cada segmento, por lo general no estará
totalmente llena. En consecuencia, se tiene, en promedio, una
fragmentación interna de media página por
segmento.
Segmentación con paginación: Intel
386
El sistema
operativo IBM OS/2 de 32 bits es un sistema
operativo que corre con las arquitecturas del procesador
Intel 386 y 486. El 386 una la segmentación con
paginación para su manejo de memoria. El número
máximo de segmentos por proceso es
de 16K y cada segmento puede llegar a ser de hasta 4 gigabytes.
El tamaño de página es de 4K.
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Fig. 16. Traducción de dirección en el
Intel 80386
El espacio de direcciones lógicas está
dividido en dos particiones. La primera partición
consiste en segmentos de hasta 8K los cuales son privados para
ese proceso. La segunda partición también
consiste en segmentos de hasta 8K, los cuales son compartidos
entre todos los procesos. La información de la primera
partición es guardada en la tabla descriptora local (LDT
– Local Descriptor Table), y la de la segunda
partición es guardada en la tabla descriptora global
(GDT – Global Descriptor Table). Cada registro de las
tablas LDT y GDT consiste de 8 bytes con información detallada sobre un segmento
en particular incluyendo la ubicación base y longitud
del segmento.
Cada segmento es paginado, y cada página es de
4K. Una tabla de páginas puede entonces consistir de
hasta un millón de registros. Dado
que cada registro
consiste de 4 bytes, cada proceso puede llegar a necesitar
hasta 4 megabytes de espacio de direcciones física para
la tabla de páginas únicamente. Claro está
que no sería conveniente alojar la tabla de
páginas contigua en la memoria principal. La
solución que es implementada en el esquema para el 386,
es usar un esquema de paginación de dos niveles. La
dirección lineal es dividida en un número de
página consistente de 20 bits y un offset de
página de 12 bits. Siendo que se pagina a la tabla de
páginas, el número de páginas es a su vez
dividido en un apuntador para el directorio de páginas
de 10 bit y en un apuntador para la tabla de páginas de
10 bit. La transición de la dirección se puede
apreciar en más detalle en la figura 16.
Capitulo 5
Comunicación y sincronización de
procesos
Uno de los módulos más importantes de un
sistema operativo es la de administrar los procesos y tareas
del sistema de cómputo. En esta sección se
revisarán dos temas que componen o conciernen a este
módulo: la planificación del procesador y
los problemas de
concurrencia.
Planificación del procesador
La planificación del procesador se refiere a
la manera o técnicas
que se usan para decidir cuánto tiempo de
ejecución y cuando se le asignan a cada proceso del
sistema. Obviamente, si el sistema es monousuario y monotarea
nohay mucho que decidir, pero en el resto de los sistemas esto
es crucial para el buen funcionamiento del sistema.
Niveles de planificación
En los sistemas de planificación generalmente
se identifican tres niveles: el alto, em medio y el bajo. El
nivel alto decide que trabajos (conjunto de procesos) son
candidatos a convertirse en procesos compitiendo por los
recursos del
sistema; el nivel intermedio decide que procesos se suspenden o
reanudan para lograr ciertas metas de rendimiento mientras que
el planificador de bajo nivel es el que decide que proceso, de
los que ya están listos (y que en algún momento
paso por los otros dos planificadores) es al que le toca ahora
estar ejecutándose en la unidad central de
procesamiento. En este trabajo se revisaran principalmente los
planificadores de bajo nivel porque son los que finalmente
eligen al proceso en ejecución.
Objetivos de la planificación
Una estrategia de
planificación debe buscar que los procesos obtengan sus
turnos de ejecución apropiadamente, conjuntamente con un
buen rendimiento y minimización de la sobrecarga
(overhead) del planificador mismo. En general, se buscan cinco
objetivos
principales:
- Justicia o Imparcialidad: Todos los procesos son
tratados de
la misma forma, y en algún momento obtienen su turno de
ejecución o intervalos de tiempo de ejecución
hasta su terminación exitosa. - Maximizar la Producción: El sistema debe de finalizar
el mayor numero de procesos en por unidad de
tiempo. - Maximizar el Tiempo de Respuesta: Cada usuario o
proceso debe observar que el sistema les responde
consistentemente a sus requerimientos. - Evitar el aplazamiento indefinido: Los procesos deben
terminar en un plazo finito de tiempo. - El sistema debe ser predecible: Ante cargas de
trabajo ligeras el sistema debe responder rápido y con
cargas pesadas debe ir degradándose paulatinamente. Otro
punto de vista de esto es que si se ejecuta el mismo proceso en
cargas similares de todo el sistema, la respuesta en todos los
casos debe ser similar.
Características a considerar de los
procesos
- No todos los equipos de cómputo procesan el
mismo tipo de trabajos, y un algoritmo de
planificación que en un sistema funciona excelente puede
dar un rendimiento pésimo en otro cuyos procesos tienen
características diferentes. Estas
características pueden ser: - Cantidad de Entrada/Salida: Existen procesos que
realizan una gran cantidad de operaciones de
entrada y salida (aplicaciones de bases de datos,
por ejemplo). - Cantidad de Uso de CPU: Existen
procesos que no realizan muchas operaciones de
entrada y salida, sino que usan intensivamente la unidad
central de procesamiento. Por ejemplo, operaciones con matrices. - Procesos de Lote o Interactivos: Un proceso de lote
es más eficiente en cuanto a la lectura
de datos, ya que generalmente lo hace de archivos,
mientras que un programa
interactivo espera mucho tiempo (no es lo mismo el tiempo de
lectura de
un archivo que la
velocidad en
que una persona teclea
datos) por las respuestas de los usuarios. - Procesos en Tiempo Real: Si los procesos deben dar
respuesta en tiempo real se requiere que tengan prioridad para
los turnos de ejecución. - Longevidad de los Procesos: Existen procesos que
típicamente requerirán varias horas para
finalizar su labor, mientras que existen otros que solo
necesitan algunos segundos.
Planificación apropiativa o no apropiativa
(preemptive or not preemptive)
La planificación apropiativa es aquella en la
cual, una vez que a un proceso le toca su turno de
ejecución ya no puede ser suspendido, ya no se le puede
arrebatar la unidad central de procesamiento. Este esquema
puede ser peligroso, ya que si el proceso contiene accidental o
deliberadamente ciclos infinitos, el resto de los procesos
pueden quedar aplazados indefinidamente. Una
planificación no apropiativa es aquella en que existe un
reloj que lanza interrupciones periodicas en las cuales el
planificador toma el control y se
decide si el mismo proceso seguirá ejecutándose o
se le da su turno a otro proceso. Este mismo reloj puede servir
para lanzar procesos manejados por el reloj del sistema. Por
ejemplo en los sistemas UNIX existen
los 'cronjobs' y 'atjobs', los cuales se programan en base a la
hora, minuto, día del mes, día de la semana y
día del año.
En una planificación no apropiativa, un trabajo
muy grande aplaza mucho a uno pequeño, y si entra un
proceso de alta prioridad esté también debe
esperar a que termine el proceso actual en
ejecución.
Asignación del turno de
ejecución
Los algoritmos
de la capa baja para asignar el turno de ejecución se
describen a continuación:
- Por prioridad: Los procesos de mayor prioridad se
ejecutan primero. Si existen varios procesos de mayor prioridad
que otros, pero entre ellos con la misma prioridad, pueden
ejecutarse estos de acuerdo a su orden de llegada o por 'round
robin'. La ventaja de este algoritmo es
que es flexible en cuanto a permitir que ciertos procesos se
ejecuten primero e, incluso, por más tiempo. Su
desventaja es que puede provocar aplazamiento indefinido en los
procesos de baja prioridad. Por ejemplo, suponga que existen
procesos de prioridad 20 y procesos de prioridad 10. Si durante
todo el día terminan procesos de prioridad 20 al mismo
ritmo que entran otros con esa prioridad, el efecto es que los
de prioridad 10 estarán esperando por siempre.
También provoca que el sistema sea impredecible para los
procesos de baja prioridad. - El trabajo más corto primero: Es dificil de
llevar a cabo porque se requiere saber o tener una
estimación de cuánto tiempo necesita el proceso
para terminar. Pero si se sabe, se ejecutan primero aquellos
trabajos que necesitan menos tiempo y de esta manera se obtiene
el mejor tiempo de respuesta promedio para todos los procesos.
Por ejemplo, si llegan 5 procesos A,B,C,D y E cuyos tiempos de
CPU son 26,
18, 24, 12 y 4 unidades de tiempo, se observa que el orden de
ejecución será E,D,B,C y A (4,12,18, 24 y 26
unidades de tiempo respectivamente). En la tabla siguiente se
muestra en que unidad de tiempo comienza a ejecutarse cada
proceso y como todos comenzaron a esperar desde la unidad cero,
se obtiene el tiempo promedio de espera.
Proceso Espera desde Termina Tiempo de
Espera
A 0 4 4
B 0 16 16
C 0 34 34
D 0 58 58
E 0 84 84
Tiempo promedio = (4 + 16 + 34 + 58 + 84 )/5 = 39
unidades.
- El primero en llegar, primero en ejecutarse: Es muy
simple, los procesos reciben su turno conforme llegan. La
ventaja de este algoritmo es que es justo y no provoca
aplazamiento indefinido. La desventaja es que no aprovecha
ninguna característica de los procesos y puede no servir
para unproceso de tiempo real. Por ejemplo, el tiempo promedio
de respuesta puede ser muy malo comparado con el logrado por el
del trabajo más corto primero. Retomando el mismo
ejemplo que en el algoritmo anterior, obtenemos un tiempo de
respuesta promedio (26+44+68+80+84)/5 = 60 unidades, el cual es
muy superior a las 39 unidades que es el mejor tiempo
posible. - Round Robin: También llamada por turno,
consiste en darle a cada proceso un intervalo de tiempo de
ejecución (llamado time slice), y cada vez que se vence
ese intervalo se copia el contexto del proceso a un lugar
seguro y se
le da su turno a otro proceso. Los procesos están
ordenados en una cola circular. Por ejemplo, si existen tres
procesos, el A,B y C, dos repasadas del planificador
darían sus turnos a los procesos en el orden
A,B,C,A,B,C. La ventaja de este algoritmo es su simplicidad, es
justo y no provoca aplazamiento indefinido. - El tiempo restante más corto: Es parecido al
del trabajo más corto primero, pero aquií se
está calculando en todo momento cuánto tiempo le
resta para terminar a todos los procesos, incluyendo los
nuevos, y aquel que le quede menos tiempo para finalizar es
escogido para ejecutarse. La ventaja es que es muy útil
para sistemas de tiempo compartido porque se acerca mucho al
mejor tiempo de respuesta, además de responder
dinámicamente a la longevidad de los procesos; su
desventaja es que provoca más sobrecarga porque el
algoritmo es más complejo. - La tasa de respuesta más alta: Este algoritmo
concede el truno de ejecución al proceso que produzca el
valor mayor
de la siguiente formula:
tiempo que ha esperado + tiempo total para
terminar
valor =
___________________________________________
tiempo total para terminar.
Es decir, que dinámicamente el valor se va
modificando y mejora un poco las deficiciencias del algoritmo
del trabajo más corto primero.
- Por política: Una forma
de asignar el turno de ejecución es por politica, en la
cual se establece algún reglamento específico que
el planificador debe obedecer. Por ejemplo, una politica
podría ser que todos los procesos reciban el mismo
tiempo de uso de CPU en cualquier momento. Esto sig- nifica,
por ejemplo, que si existen 2 procesos y han recibido 20
unidades de tiempo cada uno (tiempo acumulado en time slices de
5 unidades) y en este momento entra un tercer proceso, el
planificador le dara inmediatamente el turno de
ejecución por 20 unidades de tiempo. Una vez que todos
los procesos están 'parejos' en uso de CPU, se les
aplica 'round robin'.
Problemas de Concurrencia
En los sistemas de tiempo compartido (aquellos con
varios usuarios, procesos, tareas, trabajos que reparten el uso
de CPU entre estos) se presentan muchos problemas
debido a que los procesos compiten por los recursos del
sistema. Imagine que un proceso está escribiendo en la
unidad de cinta y se le termina su turno de ejecución e
inmediatamente después el proceso elegido para
ejecutarse comienza a escribir sobre la misma cinta. El
resultado es una cinta cuyo contenido es un desastre de datos
mezclados. Así como la cinta, existen una multitud de
recursos cuyo acceso debe der controlado para evitar los
problemas de la concurrencia.
El sistema operativo debe ofrecer mecanismos para
sincronizar la ejecución de procesos: semáforos,
envío de mensajes, 'pipes', etc. Los semáforos
son rutinas de software (que
en su nivel más interno se auxilian del hardware) para
lograr exclusión mutua en el uso de recursos. Para
entender este y otros mecanismos es importante entender los
problemas generales de concurrencia, los cuales se describen
enseguida.
- Condiciones de Carrera o Competencia: La
condición de carrera (race condition) ocurre cuando dos
o más procesos accesan un recurso compartido sin
control, de manera que el resultado combinado de este acceso
depende del orden de llegada. Suponga, por ejemplo, que dos
clientes de un
banco realizan
cada uno una operación en cajeros diferentes al mismo
tiempo. - El usuario A quiere hacer un depósito. El B un
retiro. El usuario A comienza la transacción y lee su
saldo que es 1000. En ese momento pierde su turno de
ejecución (y su saldo queda como 1000) y el usuario B
inicia el retiro: lee el saldo que es 1000, retira 200 y
almacena el nuevo saldo que es 800 y termina. El turno de
ejecución regresa al usuario A el cual hace su
depósito de 100, quedando saldo = saldo + 100 = 1000 +
100 = 1100. Como se ve, el retiro se perdió y eso le
encanta al usuario A y B, pero al banquero no le convino esta
transacción. El error pudo ser al revés, quedando
el saldo final en 800. - Postergación o Aplazamiento Indefinido(a):
Esto se mencionó en el apartado anterior y consiste en
el hecho de que uno o varios procesos nunca reciban el
suficiente tiempo de ejecución para terminar su tarea.
Por ejemplo, que un proceso ocupe un recurso y lo marque como
'ocupado' y que termine sin marcarlo como 'desocupado'. Si
algún otro proceso pide ese recurso, lo verá
'ocupado' y esperará indefinidamente a que se
'desocupe'. - Condición de Espera Circular: Esto ocurre
cuando dos o más procesos forman una cadena de espera
que los involucra a todos. Por ejemplo, suponga que el proceso
A tiene asignado el recurso 'cinta' y el proceso B tiene
asignado el recurso 'disco'. En ese momento al proceso A se le
ocurre pedir el recurso 'disco' y al proceso B el recurso
'cinta'. Ahi se forma una espera circular entre esos dos
procesos que se puede evitar quitándole a la fuerza un
recurso a cualquiera de los dos procesos. - Condición de No Apropiación: Esta
condición no resulta precisamente de la concurrencia,
pero juega un papel
importante en este ambiente.
Esta condición especifica que si un proceso tiene
asignado un recurso, dicho recurso no puede
arrebatársele por ningún motivo, y estará
disponible hasta que el proceso lo 'suelte' por su
voluntad. - Condición de Espera Ocupada: Esta
condición consiste en que un proceso pide un recurso que
ya está asignado a otro proceso y la condición de
no apropiación se debe cumplir. Entonces el proceso
estará gastando el resto de su time slice checando si el
recurso fue liberado. Es decir, desperdicia su tiempo de
ejecución en esperar. La solución más
común a este problema consiste en que el sistema
operativo se dé cuenta de esta situación y mande
a una cola de espera al proceso, otorgándole
inmediatamente el turno de ejecución a otro
proceso. - Condición de Exclusión Mutua: Cuando un
proceso usa un recurso del sistema realiza una serie de
operaciones sobre el recurso y después lo deja de usar.
A la sección de código que usa ese recurso se le llama
'región crítica'. La condición de
exclusión mutua establece que solamente se permite a un
proceso estar dentro de la misma región crítica.
Esto es, que en cualquier momento solamente un proceso puede
usar un recurso a la vez. Para lograr la exclusión mutua
se ideo también el concepto de
'región crítica'. Para logar la exclusión
mutua generalmente se usan algunas técnicas
para lograr entrar a la región crítica:
semáforos, monitores,
el algoritmo de Dekker y Peterson, los 'candados'. Para ver una
descripción de estos algoritmos
consulte - Condición de Ocupar y Esperar un Recurso:
Consiste en que un proceso pide un recurso y se le asigna.
Antes de soltarlo, pide otro recurso que otro proceso ya tiene
asignado.
Los problemas descritos son todos importantes para el
sistema operativo, ya que debe ser capaz de prevenir o
corregirlos. Tal vez el problema más serio que se puede
presentar en un ambiente de
concurrencia es el 'abrazo mortal', también llamado
'trabazón' y en inglés deadlock. El deadlock es una
condición que ningún sistema o conjunto de
procesos quisiera exhibir, ya que consiste en que se presentan
al mismo tiempo cuatro condiciones necesarias: La
condición de no apropiación, la condición
de espera circular, la condición de exclusión
mutua y la condición de ocupar y esperar un recurso.
Ante esto, si el deadlock involucra a todos los procesos del
sistema, el sistema ya no podrá hacer algo productivo.
Si el deadlock involucra algunos procesos, éstos
quedarán congelados para siempre.
En el área de la informática, el problema del deadlock ha
provocado y producido una serie de estudios y técnicas
muy útiles, ya que éste puede surgir en una sola
máquina o como consecuencia de compartir recursos en
una
red.
En el área de las bases de datos
y sistemas
distribuidos han surgido técnicas como el 'two phase
locking' y el 'two phase commit' que van más allá
de este trabajo. Sin embargo, el interés
principal sobre este problema se centra en generar
técnicas para detectar, prevenir o corregir el
deadlock.
Las técnicas para prevenir el deadlock
consisten en proveer mecanismos para evitar que se presente una
o varias de las cuatro condiciones necesarias del deadlock.
Algunas de ellas son:
- Asignar recursos en orden lineal: Esto significa que
todos los recursos están etiquetados con un valor
diferente y los procesos solo pueden hacer peticiones de
recursos 'hacia adelante'. Esto es, que si un proceso tiene el
recurso con etiqueta '5' no puede pedir recursos cuya etiqueta
sea menor que '5'. Con esto se evita la condición de
ocupar y esperar un recurso. - Asignar todo o nada: Este mecanismo consiste en que
el proceso pida todos los recursos que va a necesitar de una
vez y el sistema se los da solamente si puede dárselos
todos, si no, no le da nada y lo bloquea. - Algoritmo del banquero: Este algoritmo usa una tabla
de recursos para saber cuántos recursos tiene de todo
tipo. También requiere que los procesos informen del
máximo de recursos que va a usar de cada tipo. Cuando un
proceso pide un recurso, el algoritmo verifica si
asignándole ese recurso todavía le quedan otros
del mismo tipo para que alguno de los procesos en el sistema
todavía se le pueda dar hasta su máximo. Si la
respuesta es afirmativa, el sistema se dice que está en
'estado
seguro' y se
otorga el recurso. Si la respuesta es negativa, se dice que el
sistema está en estado
inseguro y se hace esperar a ese proceso.
Para detectar un deadlock, se puede usar el mismo
algoritmo del banquero, que aunque no dice que hay un deadlock,
sí dice cuándo se está en estado inseguro
que es la antesala del deadlock. Sin embargo, para detectar el
deadlock se pueden usar las 'gráficas de recursos'. En ellas se pueden
usar cuadrados para indicar procesos y círculos para los
recursos, y flechas para indicar si un recurso ya está
asignado a un proceso o si un proceso está esperando un
recurso. El deadlock es detectado cuando se puede hacer un
viaje de ida y vuelta desde un proceso o recurso. Por ejemplo,
suponga los siguientes eventos:
evento 1: Proceso A pide recurso 1 y se le
asigna.
evento 2: Proceso A termina su time slice.
evento 3: Proceso B pide recurso 2 y se le
asigna.
evento 4: Proceso B termina su time slice.
evento 5: Proceso C pide recurso 3 y se le
asigna.
evento 6: Proceso C pide recurso 1 y como lo
está ocupando el proceso A, espera.
evento 7: Proceso B pide recurso 3 y se bloquea porque
lo ocupa el proceso C.
evento 8: Proceso A pide recurso 2 y se bloquea porque
lo ocupa el proceso B.
En la figura 5.1 se observa como el 'resource graph'
fue evolucionando hasta que se presentó el deadlock, el
cual significa que se puede viajar por las flechas desde un
proceso o recurso hasta regresar al punto de partida. En el
deadlock están involucrados los procesos A,B y
C.
Una vez que un deadlock se detecta, es obvio que el
sistema está en problemas y lo único que resta
por hacer es una de dos cosas: tener algún mecanismo de
suspensión o reanudación [Deitel93] que permita
copiar todo el contexto de un proceso incluyendo valores de
memoria y aspecto de los periféricos que esté usando para
reanudarlo otro día, o simplemente eliminar un proceso o
arrebatarle el recurso, causando para ese proceso la
pérdida de datos y tiempo.
Capitulo 6
6.1. Los interbloqueos: Una historia basada en hechos
reales.
El problema de los interbloqueos no se circunscribe
únicamente al mundo de la informática, sino que aparece en muchos
otros ámbitos incluyendo el de la vida cotidiana. De
hecho, algunos de los ejemplos utilizados por los
investigadores en este tema están inspirados en
situaciones cotidianas.
El interbloqueo surge debido a que se produce un
conflicto
entre las necesidades de los dos vehículos: el recurso
que necesita cada vehículo lo posee el otro. Hay que
resaltar que otros vehículos que intentarán
cruzar el puente en ese momento en cualquiera de los dos
sentidos se quedarían detenidos detrás de ellos
viéndose, por tanto, implicados también en el
interbloqueo.
Las posibles estrategias
para tratar el problema de los interbloqueos son:
- Detección y
recuperación.
Una vez detectada la situación de interbloqueo
uno de los vehículos debe liberar el recurso que posee
para dejar que el otro lo utilice. Una posible
recuperación de esta situación consistiría
en seleccionar uno de los sentidos de
circulación y hacer que el vehículo o
vehículos detenidos en ese sentido dieran marcha
atrás hasta el principio del puente, liberando
así el paso en el otro sentido (se está
suponiendo que un vehículo tiene capacidad para avanzar
marcha atrás, sino fuera así, habría que
tomar una acción más drástica como tirarlo
al río que pasa por debajo del puente). Debería
existir una política para
determinar qué vehículo debe
retroceder.
- Prevención o
predicción.
Un punto importante a resaltar en este ejemplo y, en
general, sobre los interbloqueos es que, antes de producirse el
interbloqueo propiamente dicho (los vehículos detenidos
frente a frente), existe un <<punto de retorno>> a
partir del cual el interbloqueo es inevitable.
Capitulo 7
El código
destinado a manejar la entrada y salida de los diferentes
periféricos en un sistema operativo es de
una extensión considerable y sumamente complejo. Resuelve
las necesidades de sincronizar, atrapar interrupciones y ofrecer
llamadas al sistema para los programadores. En esta
sección se repasarán los principios
más importantes a tomar en cuenta en este módulo
del sistema operativo.
Dispositivos de
Entrada – Salida
Los dispositivos de
entrada salida se dividen, en general, en dos tipos:
dispositivos orientados a bloques y dispositivos orientados a
caracteres. Los dispositivos orientados a bloques tienen la
propiedad de
que se pueden direccionar, esto es, el programador puede escribir
o leer cualquier bloque del dispositivo realizando primero una
operación de posicionamiento
sobre el dispositivo. Los dispositivos más comunes
orientados a bloques son los discos duros,
la memoria, discos compactos y, posiblemente, unidades de cinta.
Por otro lado, los dispositivos orientados a caracteres son
aquellos que trabajan con secuencias de byes sin importar su
longitud ni ningúna agrupación en especial. No son
dispositivos direccionables. Ejemplos de estos dispositivos son
el teclado, la
pantalla o display y las impresoras.
La clasificación anterior no es perfecta, porque
existen varios dispositivos que generan entrada o salida que no
pueden englobarse en esas categorías. Por ejemplo, un
reloj que genera pulsos. Sin embargo, aunque existan algunos
periféricos que no se puedan categorizar, todos
están administrados por el sistema operativo por medio de
una parte electrónica – mecánica y una parte de software.
[Tan92].
Controladores de
Dispositivos (Terminales y Discos
Duros)
Los controladores de dispositivos (también
llamados adaptadores de dispositivos) son la parte electrónica de los periféricos, el
cual puede tener la forma de una tarjeta o un circuito impreso
integrado a la tarjeta maestra de la
computadora. Por ejemplo, existen controladores de discos que
se venden por separado y que se insertan en una ranura de la
computadora, o
existen fabricantes de computadoras
que integran esa funcionalidad en la misma tarjeta en que viene
la unidad central de procesamiento (tarjeta maestra).
Los controladores de dispositivos generalmente trabajan
con voltajes de 5 y 12 volts con el dispositivo propiamente, y
con la computadora
a través de interrupciones. Estas interrupciones viajan
por el 'bus' de la computadora y
son recibidos por el CPU el cual a su vez pondrá en
ejecución algún programa que sabrá
qué hacer con esa señal. A ese programa se le llama
'manejador de disposito' (device driver). Algunas veces el mismo
controlador contiene un pequeño programa en una memoria de
solo lectura o en
memoria de acceso aleatoria no volátil y re-escribible que
interactúa con el correspondiente manejador en la
computadora. En la figura 6.1 se muestra un esquema simple de
dispositivos orientados a bloques y otros a
caracteres.
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Por ejemplo, la terminal (CRT) tiene un 'chip' que se
encarga de enviar cadenas de bits por medio de un cable serial
que a su vez son recibidos por un controlador de puerto serial en
la computadora. Este 'chip' también se encarga de leer
secuencias de bits que agrupa para su despiegue en la pantalla o
para ejecutar algunas funciones de
control. Lo importante en todos estos dispositivos es que se debe
ejercer un mecanismo para sincronizar el envío y llegada
de datos de manera concurrente.
Para intercambiar datos o señales entre la
computadora y los controladores, muchas veces se usan registros o
secciones predefinidas de la memoria de la computadora. A este
esquema se le llama 'manejo de entrada – salida mapeado por
memoria' (memory mapped I/O). Por ejmplo, para una IBM PC se
muestran los vectores de
interrupción y las direcciones para la entrada -salida en
la tabla 6.1.
Controlador Dirección(Hex) Vector de
Interrupción
Reloj 040 – 043 8
Teclado 060 – 063 9
Disco Duro 320 – 32F 13
Impresora 378 – 37F 15
Monitor Mono 380 – 3BF –
Monitor Color 3D0 –
3DF –
Disco Flexible 3F0 – 3F7 14
Tabla 6.1 Direcciones de Mapeo de Entrada – Salida
Acceso Directo a Memoria (DMA)
El acceso directo a memoria se inventó con el
propósito de liberar al CPU de la carga de atender a
algunos controladores de dispositivos. Para comprender su
funcionamiento vale la pena revisar cómo trabaja un
controlador sin DMA. Cuando un proceso requiere algunos bloques
de un dispositivo, se envia una señal al controlador con
la dirección del bloque deseado. El controlador lo recibe
a través del 'bus' y el proceso puede
estar esperando la respuesta (trabajo síncrono) o puede
estar haciendo otra cosa (trabajo asíncrono). El
controlador recibe la señal y lee la dirección del
bus. Envía a su vez una o varias señales al
dispositivo mecánico (si es que lo hay) y espera los
datos. Cuando los recibe los escribe en un buffer local y
envía una señal al CPU indicándole que los
datos están listos. El CPU recibe esta interrupción
y comienza a leer byte por byte o palabra por palabra los datos
del buffer del controlador (a través del device driver)
hasta terminar la operación.
Como se ve, el CPU gasta varios ciclos en leer los datos
deseados. El DMA soluciona ese problema de la manera siguiente.
Cuando un proceso requiere uno o varios bloques de datos, el CPU
envía al controlador la petición junto con el
número de bytes deseados y la dirección de en
dónde quiere que se almacenen de regreso. El DMA
actuará como un 'cpu secundario' [Stal92] en cuanto a que
tiene el poder de tomar
el control del 'bus' e indicarle al verdadero CPU que espere.
Cuando el controlador tiene listos los datos, el DMA 'escucha' si
el 'bus' está libre aprovechando esos ciclos para ir
leyendo los datos del buffer del controlador e ir
escribiéndolos en el área de memoria que el CPU le
indicó. Cuando todos los datos fueron escritos, se le
envía una interrupción al CPU para que use los
datos. El ahorro con el
DMA es que el CPU ya no es interrumpido (aunque sí puede
ser retardado por el DMA) salvando así el 'cambio de
contexto' y además el DMA aprovechará aquellos
ciclos en que el 'bus' no fue usado por el CPU.
El hecho de que los controladores necesiten buffers
internos se debe a que conforme ellos reciban datos de los
dispositivos que controlan, los deben poder almacenar
temporalmente, ya que el CPU no está listo en todo momento
para leerlos.
Principios en el
Software de Entrada – Salida
Los principios de
software en la entrada – salida se resumen en cuatro puntos: el
software debe ofrecer manejadores de interrupciones, manejadores
de dispositivos, software que sea independiente de los
dispositivos y software para usuarios.
El primer objetivo
referente a los manejadores de interrupciones consiste en que el
programador o el usuario no debe darse cuenta de los manejos de
bajo nivel para los casos en que el dispositivo está
ocupado y se debe suspender el proceso o sincronizar algunas
tareas. Desde el punto de vista del proceso o usuario, el sistema
simplemente se tardó más o menos en responder a su
petición.
El sistema debe proveer los manejadores de dispositivos
necesarios para los periféricos, así como ocultar
las peculiaridades del manejo interno de cada uno de ellos, tales
como el formato de la información, los medios
mecánicos, los niveles de voltaje y otros. Por ejemplo, si
el sistema tiene varios tipos diferentes de discos duros, para el
usuario o programador las diferencias técnicas entre ellos
no le deben importar, y los manejadores le deben ofrecer el mismo
conjunto de rutinas para leer y escribir datos.
Software
independiente del dispositivo
Este es un nivel superior de independencia
que el ofrecido por los manejadores de dispositivos. Aquí
el sistema operativo debe ser capaz, en lo más posible, de
ofrecer un conjunto de utilerías para accesar
periféricos o programarlos de una manera consistente. Por
ejemplo, que para todos los dispositivos orientados a bloques se
tenga una llamada para decidir si se desea usar 'buffers' o no, o
para posicionarse en ellos.
La mayoría de las rutinas de entrada – salida
trabajan en modo privilegiado, o son llamadas al sistema que se
ligan a los programas del usuario formando parte de sus
aplicaciones y que no le dejan ninguna flexibilidad al usuario en
cuanto a la apariencia de los datos. Existen otras
librerías en donde el usuario si tiene poder de
decisión (por ejemplo la llamada a "printf" en el lenguaje
"C"). Otra facilidad ofrecida son las áreas de trabajos
encolados (spooling areas), tales como las de impresión y
correo
electrónico.
Los relojes son esenciales para el buen funcionamiento
de cualquier sistema porque juegan un papel decisivo
en la sincronización de procesos, en la
calendarización de trabajos por lote y para la
asignación de turnos de ejecución entre otras
tareas relevantes. Generalmente se cuenta con dos relojes en el
sistema: uno que lleva la hora y fecha del sistema y que oscila
entre 50 y 60 veces por segundo y el reloj que oscila entre 5 y
100 millones de veces por segundo y que se encarga de enviar
interrupciones al CPU de manera periódica. El reloj de
mayor frecuencia sirve para controlar el tiempo de
ejecución de los procesos, para despertar los procesos que
están 'durmiendo' y para lanzar o iniciar procesos que
fueron calendarizados.
Para mantener la hora y fecha del sistema generalmente
se usa un registro alimentado por una pila de alta
duración que almacena estos datos y que se programan de
fábrica por primera vez. Así, aunque se suspenda la
energía la fecha permanece. Para lanzar procesos (chequeo
de tiempo ocioso de un dispositivo, terminación del time
slice de un proceso, etc), se almacena un valor en un registro
(valor QUANTUM) el cual se decrementa con cada ciclo del reloj, y
cuando llega a cero se dispara un proceso que ejecutará
las operaciones necesarias (escoger un nuevo proceso en
ejecución, verificar el funcionamiento del motor del disco
flexible, hacer eco de un caracter del teclado,
etc).
Capitulo 8
Gestión de Archivos y
Directorios
Un sistema de archivos ( file system ) es una estructura de
directorios con algún tipo de organización el cual nos permite almacenar,
crear y borrar archivos en diferentes formatos. En esta
sección se revisarán conceptos importantes
relacionados a los sistemas de archivos.
Almacenamiento
Físico de Datos
En un sistema de cómputo es evidente que existe
la necesidad por parte de los usuarios y aplicaciones de
almacenar datos en algún medio, a veces por periodos
largos y a veces por instantes. cada aplicación y cada
usuario debe tener ciertos derechos con sus datos, como
son el poder crearlos y borrarlos, o cambialos de lugar;
así como tener privacidad contra otros usuarios o
aplicaciones. El subsistema de archivos del sistema operativo se
debe encargar de estos detalles, además de establecer el
formato físico en el cual almacenará los datos en
discos duros, cintas o discos flexibles. Debe ser conocido por
todos que tradicionalmente la información en los sistemas
modernos se almacena en discos duros, flexibles y unidades de
disco óptico, y en todos ellos se comparten algunos
esquemas básicos para darles formato físico: las
superficies de almacenamiento
son divididas en círculos concéntricos llamados
"pistas" y cada pista se divide en "sectores". A la unión
lógica
de varias pistas a través de varias superficies
"paralelas" de almacenamiento se
les llama "cilindros", los cuales son inspeccionados al momento
de lectura o escritura de
datos por las respectivas unidades fisicas llamadas "cabezas".
Las superficies de almacenamiento reciben el nombre de "platos" y
generalmente están en movimiento
rotatorio para que las cabezas accesen a las pistas que los
componen. Los datos se escriben a través de los sectores
en las pistas y cilindros modificando las superficies por medio
de las cabezas.
El tiempo que una cabeza se tarda en ir de una pista a
otra se le llama "tiempo de búsqueda" y dependerá
de la distancia entre la posición actual y la distancia a
la pista buscada. El tiempo que tarda una cabeza en ir del sector
actual al sector deseado se le llama tiempo de latencia y depende
de la distancia entre sectores y la velocidad de
rotación del disco. El impacto que tiene las lecturas y
escrituras sobre el sistema está determinado por la
tecnología
usada en los platos y cabezas y por la forma de resolver las
peticiones de lectura y escritura, es
decir, los algoritmos de planificación.
Algoritmos de planificación de
peticiones
Los algoritmos de planificación de peticiones de
lectura y escritura a discos se encargan de registrar dichas
peticiones y de responderlas en un tiempo razonable. Los
algoritmos más comunes para esta tarea son:
- Primero en llegar, primero en ser servido ( FIFO ):
Las peticiones son encoladas de acuerdo al orden en que
llegaron y de esa misma forma se van leyendo o escribiendo las
mismas. La ventaja de este algoritmo es su simplicidad y no
causa sobrecarga, su desventaja principal es que no aprovecha
para nada ninguna característica de las peticiones, de
manera que es muy factible que el brazo del disco se mueva muy
ineficientemente, ya que las peticiones pueden tener
direcciones en el disco unas muy alejadas de otras. Por
ejemplo, si se están haciendo peticiones a los sectores
6,10,8,21 y 4, las mismas serán resueltas en el mismo
orden. _ Primero el más cercano a la posición
actual: En este algoritmo las peticiones se ordenan de acuerdo
a la posición actual de la cabeza lectora, sirviendo
primero a aquellas peticiones más cercanas y reduciendo,
así, el movimiento
del brazo, lo cual constituye la ventaja principal de este
algoritmo. Su desventaja consiste en que puede haber
solicitudes que se queden esperando para siempre, en el
infortunado caso de que existan peticiones muy alejadas y en
todo momento estén entrando peticiones que estén
más cercanas. Para las peticiones 6,10,8,21 y 4, las
mismas serán resueltas en el orden 4,6,8,10 y
21. - Por exploración ( algoritmo del elevador ): En
este algoritmo el brazo se estará moviendo en todo
momento desde el perímetro del disco hacia su centro y
viceversa, resolviendo las peticiones que existan en la
dirección que tenga en turno. En este caso las
peticiones 6,10,8,21 y 4 serán resueltas en el orden
6,10,21,8 y 4; es decir, la posición actual es 6 y como
va hacia los sectores de mayor numeración (hacia el
centro, por ejemplo), en el camino sigue el sector 10, luego el
21 y ese fue el más central, así que ahora el
brazo resolverá las peticiones en su camino hacia afuera
y la primera que se encuentra es la del sector 8 y luego la 4.
La ventaja de este algoritmo es que el brazo se moverá
mucho menos que en FIFO y evita la espera indefinida; su
desventaja es que no es justo, ya que no sirve las peticiones
en el orden en que llegaron, además de que las
peticiones en los extremos interior y exterior tendrán
un tiempo de respuesta un poco mayor. - Por exploración circular: Es una
variación del algoritmo anterior, con la única
diferencia que al llegar a la parte central, el brazo regresa
al exterior sin resolver ninguna petición, lo cual
proveerá un tiempo de respuesta más cercana al
promedio para todas las peticiones, sin importar si
están cercas del centro o del exterior.
Asignación del espacio de
almacenamiento
El subsistema de archivos se debe encargar de localizar
espacio libre en los medios de
almacenamiento para guardar archivos y para después
borrarlos, renombrarlos o agrandarlos. Para ello se vale de
localidades especiales que contienen la lista de archivos creados
y por cada archivo una serie
de direcciones que contienen los datos de los mismos. Esas
localidades especiales se llaman directorios. Para asignarle
espacio a los archivos existen tres criterios generales que se
describen enseguida.
- Asignación contigua: Cada directorio contiene
la los nombres de archivos y la dirección del bloque
inicial de cada archivo, así como el tamaño total
de los mismos. Por ejemplo, si un archivo comienza en el sector
17 y mide 10 bloques, cuando el archivo sea accesado, el brazo
se moverá inicialmente al bloque 17 y de ahí
hasta el 27. Si el archivo es borrado y luego creado otro
más pequeño, quedarán huecos
inútiles entre archivos útiles, lo cual se llama
fragmentación externa. - Asignación encadenada: Con este criterio los
directorios contienen los nombres de archivos y por cada uno de
ellos la dirección del bloque inicial que compone al
archivo. Cuando un archivo es leído, el brazo va a esa
dirección inicial y encuentra los datos iniciales junto
con la dirección del siguiente bloque y así
sucesivamente. Con este criterio no es necesario que los
bloques estén contiguos y no existe la
fragmentación externa, pero en cada "eslabón" de
la cadena se desperdicia espacio con las direcciones mismas. En
otras palabras, lo que se crea en el disco es una lista
ligada. - Asignación con índices ( indexada ): En
este esquema se guarda en el directorio un bloque de
índices para cada archivo, con apuntadores hacia todos
sus bloques constituyentes, de mabnera que el acceso directo se
agiliza notablemente, a cambio de
sacrificar varios bloques para almacenar dichos apuntadores.
Cuando se quiere leer un archivo o cualquiera de sus partes, se
hacen dos accesos: uno al bloque de índices y otro a la
dirección deseada. Este es un esquema excelente para
archivos grandes pero no para pequeños, porque la
relación entre bloques destinados para índices
respecto a los asignados para datos es
incosteable..
Métodos de acceso en los sistemas de
archivos
Los métodos de
acceso se refiere a las capacidades que el subsistema de archivos
provee para accesar datos dentro de los directorios y medios de
almacenamiento en general. Se ubican tres formas generales:
acceso secuencial, acceso directo y acceso directo
indexado.
- Acceso secuencial: Es el método
más lento y consiste en recorrer los componentes de un
archivo uno en uno hasta llegar al registro deseado. Se
necesita que el orden lógico de los registros sea igual
al orden físico en el medio de almacenamiento. Este tipo
de acceso se usa comunmente en cintas y cartuchos. - Acceso directo: Permite accesar cualquier sector o
registro inmediatamente, por medio de llamadas al sistema como
la de seek. Este tipo de acceso es rápido y se usa
comúnmente en discos duros y discos o archivos manejados
en memoria de acceso aleatorio. _ Acceso directo indexado: Este
tipo de acceso es útil para grandes volúmenes de
información o datos. Consiste en que cada arcivo tiene
una tabla de apuntadores, donde cada apuntador va a la
dirección de un bloque de índices, lo cual
permite que el archivo se expanda a través de un espacio
enorme. Consume una cantidad importante de recursos en las
tablas de índices pero es muy rápido.
Operaciones soportadas por el subsistema de
archivos
Independientemente de los algoritmos de
asignación de espacio, de los métodos de
acceso y de la forma de resolver las peticiones de lectura y
escritura, el subsistema de archivos debe proveer un conjunto de
llamadas al sistema para operar con los datos y de proveer
mecanismos de protección y seguridad. Las
operaciones básicas que la mayoría de los sistemas
de archivos soportan son:
- Crear ( create ) : Permite crear un archivo sin
datos, con el propósito de indicar que ese nombre ya
está usado y se deben crear las estructuras
básicas para soportarlo. - Borrar ( delete ): Eliminar el archivo y liberar los
bloques para su uso posterior. - Abrir ( open ): Antes de usar un archivo se debe
abrir para que el sistema conozca sus atributos, tales como el
dueño, la fecha de modificación, etc. _ Cerrar (
close ): Después de realizar todas las operaciones
deseadas, el archivo debe cerrarse para asegurar su integridad
y para liberar recursos de su control en la
memoria. - Leer o Escribir ( read, write ): Añadir
información al archivo o leer el caracter o una cadena
de caracteres a partir de la posición actual. _
Concatenar ( append ): Es una forma restringida de la llamada
`write', en la cual sólo se permite añadir
información al final del archivo. _ Localizar ( seek ):
Para los archivos de acceso directo se permite posicionar el
apuntador de lectura o escritura en un registro aleatorio, a
veces a partir del inicio o final del archivo. - Leer atributos: Permite obtener una estructura
con todos los atributos del archivo especificado, tales como
permisos de escritura, de borrado, ejecución,
etc. - Poner atributos: Permite cambiar los atributos de un
archivo, por ejemplo en UNIX, donde
todos los dispositivos se manejan como si fueran archivos, es
posible cambiar el comportamiento de una terminal con una de estas
llamadas. - Renombrar ( rename ): Permite cambiarle el nombre e
incluso a veces la posición en la
organización de directorios del archivo
especificado. Los subsistemas de archivos también
proveen un conjunto de llamadas para operar sobre directorios,
las más comunies son crear, borrar, abrir, cerrar,
renombrar y leer. Sus funcionalidades son obvias, pero existen
también otras dos operaciones no tan comunes que son la
de `crear una liga' y la de `destruir la liga'. La
operación de crear una liga sirve para que desde
diferentes puntos de la
organización de directorios se pueda accesar un
mismo directorio sin necesidad de copiarlo o duplicarlo. La
llamada a `destruir nla liga' lo que hace es eliminar esas
referencias, siendo su efecto la de eliminar las ligas y no el
directorio real. El directorio real es eliminado hasta que la
llmada a `destruir liga' se realiza sobre
él.
Algunas facilidades extras de los sistemas de
archivos
Algunos sistemas de archivos proveen herramientas
al administrador del
sistema para facilitarle la vida. Las más notables es la
facilidad de compartir archivos y los sistemas de
`cotas'.
La facilidad de compartir archivos se refiere a la
posibilidad de que los permisos de los archivos o directorios
dejen que un grupo de
usuarios puedan accesarlos para diferentes operaciones" leer,
escribir, borrar, crear, etc. El dueño verdadero es quien
decide qué permisos se aplicarán al grupo e,
incluso, a otros usuarios que no formen parte de su grupo. La
facilidad de `cotas' se refiere a que el sistema de archivos es
capaz de llevar un control para que cada usuario pueda usar un
máximo de espacio en disco duro.
Cuando el usuario excede ese límite, el sistema le
envía un mensaje y le niega el permiso de seguir
escribiendo, obligándolo a borrar algunos archivos si es
que quiere almacenar otros o que crezcan. La versión de
UNIX SunOS contiene esa facilidad.
Los sistemas de archivos aislados son aquellos que
residen en una sola computadora y no existe la posibilidad de
que, aún estando en una red, otros sistemas puedan
usar sus directorios y archivos. Por ejemplo, los archivos en
discos duros en el sistema MS-DOS
clásico se puede ver en esta categoría.
Sistemas de Archivos
Compartidos o de Red
Estos sistemas de archivos es factible accesarlos y
usarlos desde otros nodos en una red. Generalmente existe
un `servidor' que es
la computadora en donde reside el sistema de archivos
físicamente, y por otro lado están los `clientes', que se
valen del servidor para ver
sus archivos y directorios de manera como si estuvieran
localmente en el cliente. Algunos
autores les llaman a estos sistemas de archivos `sistemas de
archivos distribuídos' lo cual no se va a discutir en este
trabajo.
Los sistemas de archivos compartidos en red más populares son
los provistos por Netware, el Remote Filke Sharing ( RFS en UNIX
), Network File System ( NFS de Sun Microsystems ) y el Andrew
File System ( AFS ). En general, lo que proveen los servidores es un
medio de que los clientes, localmente, realicen peticiones de
operaciones sobre archivos los cuales con `atrapadas' por un
`driver' o un `módulo' en el núcleo del sistema
operativo, el cual se comunica con el servidor a través de
la red y la operación se ejecuta en el servidor. Existen
servidores de
tipo "stateless y no-stateless". Un servidor "stateless" no
registra el estado de
las operaciones sobre los archivos, de manera que el cliente se
encarga de todo ese trabajo. La ventaja de este esquema es que si
el servidor falla, el cliente no perderá
información ya que ésta se guarda en memoria
localmente, de manera que cuando el servidor reanude su servicio el
cliente proseguirá como si nada hubiese sucedido. Con un
servidor "no-stateless", esto no es posible.
La protección sobre las operaciones se lleva a
cabo tanto el los clientes como en el servidor: si el usuario
quiere ejecutar una operación indebida sobre un archivo,
recibirá un mensaje de error y posiblemente se
envíe un registro al subsistema de `seguridad' para
informar al administrador del
sistema de dicho intento de violación.
En la práctica, el conjunto de permisos que cada
usuario tiene sobre el total de archivos se almacena en estructuras
llamadas `listas de acceso' ( access lists
).
Con el gran auge de las redes de comunicaciones
y su incremento en el ancho de banda, la proliferación de
paquetes que ofrecen la compartición de archivos es
común. Los esquemas más solicitados en la industria es
el poder accesar los grandes volúmenes de
información que residen en grandes servidores desde las
computadoras
personales y desde otros servidores también. Es una
realidad que la solución más socorrida en las
empresas
pequeñas es usar Novell Netware
en un servidor 486 o superior y accesar los archivos desde
máquinas similares.
A veces se requieren soluciones
más complejas con ambientes
heterogéneos:
diferentes sistemas
operativos y diferentes arquitecturas. Uno de los sistemas de
archivos más expandidos en estaciones de trabajo es el
NFS, y prácticamente todas las versiones de UNIX traen
instalado un cliente y hasta un servidor de este servicio. Es
posible así que una gran cantidad de computadoras
personales (de 10 a 80 ) accesen grandes volúmenes de
información o paquetería (desde 1 a 8 Gygabytes )
desde una sola estación de trabajo, e incluso tener la
flexibilidad de usar al mismo tiempo servidores de Novell y NFS.
Soluciones
similares se dan con algunos otros paquetes comerciales, pero
basta ya de `goles'. Lo importante aquí es observar que el
mundo se va moviendo poco a poco hacia soluciones
distribuídas, y hacia la estandarización que,
muchas veces, es `de facto'.
Capitulo 11.
11.1 historia de linux.
El origen de LINUX esta en MINIX que es un Sistema
Operativo de carácter
pedagógico basado en un microkernel. Fue desarrollado
por Andrew S. Tanenbaum. Con el objetivo
principal de que sirviera de apoyo para la enseñanza de sistemas
operativos.
Andrew, intentaba demostrar al crear MINIX que se
podía construir un sistema operativo mas sencillo y
fiable pero a la vez muy eficiente.
MINIX presentaba las siguientes
características:
- Ofrecía una interfaz basada en la de UNIX
versión 7. - Tenía un tamaño relativamente
pequeño, constaba aproximadamente de 12,000
líneas de código. - Podía trabajar en equipos que disponían
de unos recursos hardware muy
limitados, de hecho, incluso podía utilizarse en
maquinas que no disponían de disco
duro. - MINIX presenta algunas deficiencias y
limitaciones. - La gestión de memoria era muy primitiva, no
había ni memoria
virtual ni intercambio. - Por simplicidad, algunas partes del sistema
operativo, como por ejemplo el sistema de archivos, no eran
concurrentes, lo que limitaba considerablemente en rendimiento
del sistema.
En 1990 un estudiante Finlandés llamado LINUS
TORVALDS, con ganas de ampliar sus conocimientos envío
un mensaje a un grupo de noticias comp.os.minix, comentando que
estaba desarrollando un nuevo sistema operativo tomando como
base MINIX. Se estaba produciendo el humilde nacimiento de
LINUX, cuya primera versión(numerada como 0.01) vio la
luz a mediados
del año de 1991.
LINUX tomaba prestadas numerosas
características de MINIX por ejemplo el sistema de
archivos. De hecho LINUX se desarrollo
usando como plataforma de trabajo MINIX y las primeras
versiones de LINUX no eran autónomas sino que
tenían que arrancarse desde MINIX.
MINIX y LINUX son radicalmente diferentes. Por un lado
LINUX solventa muchas de las deficiencias de MINIX como la
carencia de memoria
virtual. Estas mejoras permiten que se trate de un sistema
adecuado para trabajar de memoria profesional, no
limitándose su uso a un entorno académico , pero
la diferencia la diferencia mas importante entre ellos esta en
su organización interna. Mientras que MINIX
tiene una estructura moderna basada en un Microkernel, LINUX
posee una estructura monolítica mas clásica.
Desde su lanzamiento publico en 1991, LINUX ha ido
evolucionando e incorporando nuevas características.
Además se transportado a otros procesadores
como SPARC, ALPHA Y MIPS. En la actualidad es un sistema con
unas características y prestaciones
comparables a las de cualquier sistema operativo
comercial.
11.2 Características y estructura de
LINUX.-
LINUX es un sistema de tipo UNIX y, por tanto, posee
las características típicas de los sistemas UNIX,
LINUX se trata de un sistema multiusuarios y multitarea de
propósito general.
Características especificas de
LINUX.
- Proporciona una interfaz POSIX.
- Tiene un código independiente del procesador
en la medida de lo posible. - Puede adaptarse en maquinas de muy diversas
características. - Permite incluir de forma dinámica nuevas funcionalidades al
núcleo del sistema operativo gracias al mecanismo de los
módulos. - Proporciona soportes para una gran variedad de tipos
de sistemas de archivos, entre ellos los utilizados en Windows.
También es capaz de manejar distintos formatos de
archivos ejecutables. - Proporciona soportes para los multiprocesadores
utilizando un esquema de multiprocesos simétrico. Para
aprovechar al máximo el paralelismo del hardware, se ha
ido modificando progresivamente el núcleo con el
objetivo de aumentar su concurrencia interna.
En cuanto a la estructura de LINUX, como se
comentó previamente, tiene una organización
monolítica al igual que ocurre con la mayoría de
las implementaciones de UNÍS. A pesar de este carácter
monolítico, el núcleo no es algo estático
y cerrado sino que se pueden añadir y quitar
módulos de código en tiempo de ejecución.
Se trata de un mecanismo similar al de las bibliotecas
dinámicas pero aplicado al propio sistema operativo. Se
pueden añadir módulos que correspondan con nuevos
tipos de sistemas de archivos, nuevos manejadores de
dispositivos o gestores de nuevos formatos de
ejecutables.
Un sistema LINUX completo no sólo está
formado por el núcleo monolítico sino
también incluye programas del sistema (como, por
ejemplo, demonios) y bibliotecas del sistema.
Debido a las dificultades que hay para instalar y
configurar el sistema, existen diversas distribuciones de LINUX
que incluyen el núcleo, los programas y bibliotecas del
sistema, así como un conjunto de herramientas
de instalación y configuración que facilitan
considerablemente esta ardua labor. Hay distribuciones tanto de
carácter comercial como gratuitas. Algunas de las
distribuciones más populares son Slackware, Debian, suse
y Red Hat.
11.3 gestión de procesos.
La gestión de procesos en LINUX es
básicamente igual en cualquier otra variedad de
UNÍS. Un aspecto original de LINUX es el servicio clone
que es una extensión del clásico fork.
Este nuevo servicio permite crear un proceso que
comparta con el padre su mapa de memoria, sus rutinas de manejo
de señales y sus descriptores de archivos. Aunque LINUX
no implementa threads en el núcleo, se pueden construir
bibliotecas de threads usando este nuevo servicio.
En cuanto a la sincronización dentro del
núcleo, siguiendo la tradición de UNÍS,
LINUX no permite que haya llamadas concurrentes activas dentro
del sistema operativo. Así se produce un evento que
causa un cambio de proceso mientras se está ejecutando
una llamada al sistema (por ejemplo, una interrupción de
reloj), el cambio se difiere hasta que la llamada termina o se
bloquea. Para evitar las condiciones de carrera entre la
ejecución de una llamada y el tratamiento de una
interrupción, se prohíben las interrupciones en
pequeñas zonas del código del sistema.
Puesto que el código del rutina de
interrupción ejecuta con una prioridad lata bloqueando
el tratamiento de las interrupciones, es importante que estas
rutinas sean muy cortas. Para ayudar a lograr este objetivo,
LINUX ofrece un mecanismo que permite dividir las operaciones
asociadas a una interrupción en dos partes:
- Las operaciones de carácter más urgente
se ejecutan en el entorno de la rutina de interrupción,
denominada mitad superior en la nomenclatura de
LINUX. - Las operaciones menos urgentes las ejecuta una rutina
del núcleo que tiene una prioridad inferior a la de los
dispositivos. Esta rutina se denomina en LINUX mitad inferior y
durante su ejecución no estarán bloqueadas las
interrupciones de otros dispositivos. La propia mitad superior
se encarga de fijar un determinado valor en una estructura de
datos para indicar que la mitad inferior está
activada. Justo antes de retornar a modo usuario, el sistema
operativo comprueba dicha estructura, y si encuentra que hay
alguna mitad inferior activada, la
ejecutará.
En cuanto a la planificación, LINUX soporta
tres clases de planificación: un algoritmo de tiempo
compartido y dos algoritmos de planificación de tiempo
real que se corresponden con los definitivos por
POSIX.
Para ver el
gráfico seleccione la opción "Descargar" del
menú superior
Figura 11.1
. Niveles de prioridad dentro del núcleo de
LINUX.
El servicio sched_setscheduler permite definir la
clase de planificación del proceso que la invoca. Esta
llamada sólo puede hacerla un proceso privilegiado. Cada
de tiempo real tiene asociada una prioridad y un tipo de
planificación que puede ser FIFO o Round-Robin. El
planificador selecciona en cada momento el proceso listo para
ejecutar que tenga mayor prioridad. Si el proceso de este tipo
FIFO, seguirá ejecutando hasta que bloquee. Si es de
tipo Round-Robin, cuando termine su rodaja, el proceso
pasará al final de la cola de procesos listos para
ejecutar de su misma prioridad.
Todo proceso tiene asociada una prioridad base.
Inicialmente la prioridad del proceso es igual a su prioridad
base. Cada vez que se produce una interrupción de reloj
se resta una unidad a la prioridad del proceso que estaba
ejecutando. El algoritmo de planificación está
basado en la prioridad del proceso y tiene carácter
exclusivo: el planificador elige el proceso listo para ejecutar
que tenga mayor prioridad.
- Gestion de memoria.
LINUX tiene un sistema de memoria que incluye todas
las características habituales en los sistemas modernos.
Estas características ya fueron discutidas en el
capítulo dedicado a este tema, por lo que en esta
sección se presentan aquellos aspectos
específicos de LINUX:
- Se utiliza un modelo de
memoria independiente del procesador. Utiliza un esquema de
paginación de 3 niveles. Existe una capa de software de
bajo nivel que se encarga de adaptar este modelo
abstracto al hardware de gestión de memoria
real. - Permite utilizar tantos dispositivos como archivos
para soporte de la memoria secundaria. - Se utiliza una versión modificada del
algoritmo del reloj como algoritmo de reemplazo. - Gestiona la memoria dinámica del propio sistema operativo
usando un algoritmo inspirado en el sistema buddy.
11.5 entrada/salida.
La entrada/salida en LINUX es muy similar a la de
cualquier otro sistema UNIX. Se distinguen, por tanto, 2 tipos
de dispositivos: dispositivos de bloques y dispositivos de
caracteres.
Como el resto de sistemas UNIX, se utiliza una
caché común
Para todos los dispositivos de bloques. El
tamaño de la caché es dinámico y crece de
acuerdo a las necesidades de memoria del resto de sistema. Para
gestionarla se usa básicamente una política de
reemplazo LRU. En las últimas versiones esta
caché trabaja coordinadamente con la utilizada por el
gestor de memoria.
En cuanto al acceso a los discos, se utiliza el
algoritmo del ascensor con un único sentido d
servicio.
Siguiendo el modelo de UNIX, en LINUX los usuarios ven
los dispositivos como archivos y utilizan los servicios
destinados a trabajar con archivos para acceder a los
dispositivos.
La red, sin embargo, es un dispositivo que tiene un
tratamiento un poco diferente. El usuario no puede acceder a
este dispositivo de la misma manera que a un archivo. La parte
del sistema operativo que trata la red está dividida en
tres niveles:
- En el nivel inferior está el manejador del
dispositivo al que el usuario no puede acceder
directamente. - En el nivel intermedio está el software que
implementa la pila de protocolos (
por ejemplo, TCP e IP). - En el nivel superior está la interfaz del
programador que corresponde con la de los sockets definidos en
el UNIX BSD.
11.6. Sistema de archivos.
LINUX da soporte a una gran variedad de tipos de
sistemas de archivos en los que se incluyen los distintos
sistemas de archivos de windows y de
otros sistemas UNIX. Además, cualquier usuario puede
programar un manejador de un nuevo tipo de sistema de archivos
e incluirlo en el sistema como un módulo.
Esta coexistencia de distintos tipos de sistemas de
archivos la posibilita el VFS (virtual file system, sistema
virtual de archivos).
Aunque admite muy diferentes tipos de sistemas de
archivos, LINUX tiene sus propio sistema de archivos que se
denomina ext2fs. Este sistema evolucionó desde el
sistema de archivos de MINIX. Se le fueron añadiendo
nuevas características al sistema de archivos de MINIX
hasta llegar al sistema extfs. Posteriormente se
rediseñó dando lugar al ext2fs actual. Se trata
de un sistema basado en el FFS (fast file system, sistema de
archivos rápidos) del UNIX BSD.
Merece mención aparte un tipo de sistema de
archivos muy especial: el sistema de archivos proc. Este
sistema de archivos no tiene soporte en ningún
dispositivo. Su objetivo es poner a disposición del
usuario datos del estado del sistema en la forma d archivos.
Esta idea no es original de LINUX ya que casi todos los
sistemas UNIX la incluyen. Sin embargo, LINUX se caracteriza
por ofrecer más información del sistema que el
resto de variedades de UNIX. En este sistema de archivos se
puede acceder a información general sobre
características y estadísticas del sistema, así como
información sobre los distintos procesos
existentes.
Para
ver el gráfico seleccione la opción "Descargar"
del menú superior
Figura 11.2. Niveles del sistema de
archivos.
Capitulo 12.
12.1. Introducción.
Windows NT es un sistema operativo multitarea, basado
en 32 bits, cuyas características principales son su
diseño orientado a objetos, el subsistema
de seguridad y los servicios de
entrada y salida.
La historia de este sistema operativo empezó en
1989, cuando Microsoft
decidió diseñar un nuevo sistema que sustituyera
a Windows 3.x y que incluyera las características
adecuadas para ser usadas en máquinas
multiprocesos de grandes dimensiones, para lo que versiones
anteriores de Windows no eran válidas. Para ello
contrató a expertos en diseño de
sistemas operativos, como Dave Cutler de DEC, que aportaron
al diseño de Windows NT
muchas de las ideas existentes en otros sistemas
operativos.
12.2. Principio de diseño de Windows
NT.
Windows NT tiene un diseño moderno de tipo
micro núcleo, con una pequeña capa de
núcleo que da soporte a las restantes funciones del
ejecutivo del sistema operativo. Dentro del ejecutivo destaca
la integración del modelo de seguridad
(nivel C2), de la gestión de red, de la existencia de
sistemas d archivos robustos y de aplicación exhaustiva
del modelo orientado a objetos.
Los principios de diseño fundamentales se
parecen mucho a los de otros sistemas
operativos:
- Compatibilidad. Tanto con los sistemas anteriores
(interfaz gráfico y sistemas de archivos FAT de Windows
3.x) como con otros sistemas operativos (OS/2, POSIX, etc.) y
con distintos entornos de red. La compatibilidad se logra
mediante el uso de subsistemas que emulan los servicios de los
distintos sistemas operativos. Los emuladores son similares a
las máquinas virtuales de MVS. - Transportabilidad. Windows NT se diseñó
para tener amplia difusión comercial, por lo que se
pensó desde el principio en la posibilidad de
transportarlo a distintos tipos de
computadoras con procesadores
CISC (Intel) y RISC ( MIPS, Digital Alpha, etc.). Para
facilitar el transporte,
Windows NT se ha construido sobre una pequeña capa de
abstracción de hardware (HAL, Hardware Abstraction
Layer) que proporciona toda la funcionalidad dependiente del
hardware al núcleo del sistema. - Escabilidad. Windows NT se diseñó de
forma modular sobre la base de un micronúcleo. Esta
arquitectura
permite repartir elementos del sistema sobre distintos
procesadores de forma sencilla y extender el sistema con nuevos
componentes. Actualmente el sistema operativo se puede ejecutar
en computadoras con 32 procesadores, lo que permite integrar
entornos de estaciones de trabajo y servidores. - Seguridad. Uno de los requisitos fundamentales de
diseño de Windows NT fue proporcionar un nivel de
seguridad C2 de acuerdo a la clasificación del DoD. Para
ello se diseñó una arquitectura de
seguridad, basada en un monitor de
seguridad, que proporciona servicios de seguridad a todos los
componentes del sistema operativo y a las aplicaciones externas
al mismo. - Fiabilidad y Robustez. Los diseñadores de
Windows NT han incluido servicios para dar más robustez
al sistema tanto en el ámbito de procesos como en el de
sistemas de archivos. Ejemplos son los sistemas de archivos con
puntos de recuperación, la información
redundantes con técnicas de paridad, las técnicas
d gestión de memoria o la existencia de depuradores
internos al núcleo. - Procesamiento Distribuido. Al contrario que otros
micronúcleos, Windows NT incluye las utilidades de
gestión de redes como parte del
núcleo del sistema, proporcionando múltiples
protocolos
de transporte,
RPC, Socket, colas de mensajes, etc. - Eficiencia. Los diseñadores de Windows NT se
plantearon diseñar un sistema muy eficiente, tanto en
monoprocesadores como en multiprocesadores. Por ello
construyeron un modelo de proceso basado en procesos ligeros y
un sistema de entrada y salida muy compacto en el que todos sus
componentes se usan como manejadores de
dispositivos.
12.3. Arquitectura de Windows NT.
Windows NT tiene una por capas muy modular, en la que
cada capa está compuesta de varios módulos
relativamente simples y con una funcionalidad muy
específica.
El sistema operativo está compuesta por las
siguientes capas:
- Capa de abstracción del hardware. Proporciona
una interfaz virtual del hardware, escondiendo las
particularidades de cada entorno de ejecución del
sistema operativo. Incluye la - funcionalidad del hardware que necesita el resto del
sistema y es el único módulo que es necesario
transportar cuando se cambia a otra plataforma
hardware. - Núcleo. Proporciona servicios y
funcionalidades básicas del sistema operativo tales como
gestión de excepciones hardware, control de procesos
ligeros, sincronización, etc. Solo incluye mecanismos,
nunca políticas, aunque toma las decisiones
para expulsar procesos de memoria. - Ejecutivo. Incluye los módulos que
proporcionan los servicios de sistema operativo para los
distintos subsistemas de ejecución. Tiene diseño
orientado a objetos. Por ello entre sus componentes incluye un
gestor de objetos, además de gestores para los sistemas
de seguridad, procesos, memoria virtual, etc. Su interfaz
define capa de servicios que el sistema operativo exporta a los
subsistemas externos al núcleo. Estos servicios son las
interfases entre los subsistemas, que se ejecutan en modo
usuario, y el núcleo. - Subsistemas de entorno de ejecución.
Proporcionan las llamadas al sistema operativo que usan las
aplicaciones de usuario, existiendo subsistemas compatibles con
distintos sistemas operativos (MS-DOS,
OS/2, POSIX 1, etc.). A diferencia de las capas anteriores, sus
componentes se ejecutan en modo usuario. Sus servicios se
pueden acceder a través de las bibliotecas de los
compiladores.
12.4. El núcleo de Windows
NT.
El núcleo es la base de Windows NT ya que
planifica las actividades, denominadas threads, de los
procesadores de la computadora. Al igual que en UNIX, el
núcleo de Windows NT se ejecuta siempre en modo seguro
(modo núcleo) y no usa la memoria virtual (no
paginable). El software del núcleo no se puede expulsar
de la UCP y, por tanto, no hay cambios de contexto durante su
ejecución. En caso en que se ejecute en un
multiprocesador se puede ejecutar simultáneamente en
todos los procesadores.
El núcleo proporciona las siguientes funciones
al resto del sistema:
- Modelos de objeto, denominados objetos del
núcleo. - Ejecución ordenada de los threads según
un modelo de prioridad con 32 niveles. - Sincronización de la ejecución de
distintos procesadores si es necesario. - Gestión de excepciones hardware.
- Gestión de interrupciones y traps.
- Funcionalidad específica para manejar el
hardware. - Mecanismos eficientes de comunicación y
sincronización.
El modelo de objetos está en la base de
funcionamiento del núcleo, que proporciona dos tipos de
de objetos básicos:
- Objetos de planificación. Permiten controlar
la ejecución y sincronización de operaciones del
sistema mediante una señal de estado. Los eventos,
mutantes, mutex, semáforos, threads y temporizadores
pertenecen a este tipo de objetos. Los mutantes son el
equivalente a los mutex, pero a nivel de usuario y concepto de
propiedad.
Los mutex solo están disponibles en el modo
núcleo. - Objetos de control. Permiten controlar las
operaciones del núcleo, pero no la planificación.
Dentro de este tipo de objeto se agrupan las interrupciones,
las llamadas asíncronas a procedimiento,
los procesos y los perfiles de ejecución.
Un objeto contiene un nombre, un manejador, un
descriptor de seguridad, una lista de manejadores de objetos
abiertos, una descripción del tipo de objeto que
almacena y un cuerpo que incluye información
específica del objeto.
Para almacenar la información acerca de los
objetos y sus atributos, el núcleo gestiona las
siguientes estructuras de datos:
- Tabla de interrupciones (IDT, Interrupt Dispatch
Table). Asocia las interrupciones con las rutinas que las
gestionan. - Tabla de descriptores de proceso ( PCB, Process
Control Blocks). Incluye apuntadores a los manejadores de
objetos de tipo proceso. Hay una tabla por cada procesador del
sistema. Asociada a ellas ayuna tabla de control de regiones de
memoria, cuyas entradas apuntan a las regiones de memoria donde
están las otras tablas con información relativa
al proceso. - Cola de temporizadores. Lista global de
temporizadores activos de
todo el sistema, se mantiene en el núcleo.
Además de estas estructuras se mantienen otras
como las colas de dispositivos, las petición de
procesadores y recursos, etc.
12.5 el ejecutivo de Windows NT.
La capa mas compleja del sistema operativo es el
ejecutivo, un conjunto de servicios comunes que pueden ser
usados por todos los subsistemas de entorno de ejecución
existentes en Windows NT a través de la capa de
servicios del sistema.
Cada grupo de servicios es manejado por uno de los
siguientes componentes:
- Gestor de objetos.
- Gestor de procesos.
- Gestor de memoria virtual.
- Monitor de seguridad.
- Utilidad para llamadas a procedimientos
locales. - Gestor de entrada y salida.
12.5. Gestor de objetos.
El gestor de objetos es el componente del ejecutivo de
Windows NT que se encarga de proporcionar servicios para todos
los aspectos de los objetos, incluyendo reglas para nombres y
seguridad. Todo el funcionamiento del sistema operativo se basa
en los objetos, que son instancias en tiempo de
ejecución de un tipo objeto particular que pueden ser
manipuladas por algún componente del sistema operativo.
Un tipo objeto está compuesto por un tipo de datos
estructurado definido por el sistema y las operaciones que se
pueden hacer sobre este tipo de datos y conjunto de atributos
de datos para dichas operaciones.
Línea del Tiempo de
Linux
El padre de Linux es Linus Torvalds, un programador
finlandés de 21 años que inicialmente no
tenía más pretensión que 'divertirse'
creando un sistema operativo para su uso personal.
Torvalds
colocó Linux en Internet para
que cualquiera lo bajara gratis, en 1991, y desde entonces
participan en su desarrollo cientos de voluntarios. Hoy Linux
se difunde más rápido que cualquier otro sistema
operativo, es venerado por una comunidad de
diez millones de usuarios y comienza a verse como una
alternativa real a Windows. Esta es su historia.
1991
– En abril, Linus Torvalds comenzó a crear un programa
que varios meses después se convertiría en Linux,
un sistema operativo Unix para PC (Unix es un sistema operativo
usado en estaciones de trabajo y otros computadores de alto
rendimiento; hay muchas versiones de Unix). Linux nació
como un pasatiempo de Torvalds, que en esa época
tenía 21 años y estudiaba segundo año de
ciencias de
los computadores en la Universidad
de Helsinki (Finlandia); su intención inicial no era
crear un sistema operativo, sino experimentar creando software
para manejar ciertas funciones básicas del PC que
había comprado cuatro meses antes (un sistema operativo
es el programa que controla el funcionamiento de un computador).
La inquietud surgió porque el sistema
operativo que usaba en su PC, llamado Minix, era una
versión de Unix limitada, y él necesitaba algo
mejor; Torvalds no usaba DOS o Windows porque le
parecían –aún hoy– sistemas pobres y
poco confiables (Minix es un sistema operativo Unix
experimental, creado por un profesor holandés para
enseñar a los estudiantes el funcionamiento de los
sistemas operativos).
– A mediados del año, el programa estaba avanzado y
Trovalds comenzó a pensar seriamente en que
podría crear el kernel de un nuevo sistema operativo,
similar a Minix pero mejor (el kernel es el corazón
de un sistema operativo). Trovalds no tenía grandes
pretensiones; él dice que no pensó en crear Linux
para que fuera un sistema operativo profesional, sino que lo
diseñó para su uso personal. Sin
embargo, poco a poco su pasatiempo se fue convirtiendo en un
proyecto
más serio.
– El 5 de octubre, Trovalds publicó en un grupo de
noticias sobre Minix, en Internet, un
mensaje en el que anunció la creación de Linux,
un sistema operativo para PC basados en procesadores Intel 386.
El mensaje decía que el sistema (Linux versión
0.02) estaba todavía en desarrollo, pero ya funcionaba,
y lo ofrecía gratis a cualquiera que deseara bajarlo.
También invitó a los programadores interesados en
sistemas operativos a usarlo, y enviarle correcciones y mejoras
para incluirlas en la próxima versión. Ese fue un
suceso clave en la historia de Linux; gracias a
Internet, Linux pronto se convertiría en un
fenómeno mundial.
1992
– En enero, Linux tenía cerca de 100 usuarios, y varios
de ellos ya participaban en el desarrollo de Linux con mejoras
y correcciones que enviaban a Torvalds por Internet. Él
lanzó ese mes la versión 0.12 de Linux; esa fue
la primera versión que incluyó partes
desarrolladas por otros programadores y la primera que
realmente se desempeñaba mejor que Minix en ciertos
aspectos.
– Microsoft
lanzó Windows 3.1.
– El número de
usuarios de Linux comenzó a crecer rápidamente, y
no era extraño que tuviera gran acogida. Al igual que
Torvalds, muchos estudiantes de sistemas y gomosos de la
computación amaban los sistemas
operativos Unix por su estabilidad y potencia,
pero estos eran inalcanzables porque una versión
comercial de Unix costaba en esa época 4.000 o 5.000
dólares, y casi todas funcionaban exclusivamente en
estaciones de trabajo de 10.000 o más dólares (no
en PC). Linux, en cambio, era un sistema Unix gratuito, y
funcionaba en PC basados en procesadores Intel (386, 486,
etc.).
– A medida que creció el número de usuarios,
también aumentaron los programadores voluntarios que se
involucraron en el desarrollo de Linux. Torvalds
distribuyó Linux bajo un tipo de licencia llamada GPL,
que permite a cualquier persona bajar,
usar, modificar e incluso vender Linux, sin pagar un peso; la
única condición es que los cambios o mejoras que
una persona o compañía realicen en Linux
también deben ser públicos. Es generó un
fenómeno de colaboración mundial sin precedentes.
Programadores de todo el planeta enviaron a Torvalds mejoras
para el kernel,
reportaron errores y comenzaron a crear controladores de
dispositivos para Linux. Se calcula que al final de 1992 Linux
tenía aproximadamente 1.000
usuarios.
1993
– Se estima que este año Linux completó 20.000
usuarios en el mundo, y más de 100 programadores
contribuyeron en su desarrollo. Para poder manejar esas
colaboraciones, Torvalds delegó las labores de
revisión del código de programación de Linux a cinco personas,
que se convirtieron en sus ‘oficiales’ principales.
A diferencia de los programas comerciales, que se actualizan
cada dos o tres años, en el mundo Linux aparecen
actualizaciones y mejoras menores cada pocas semanas; eso ha
permitido que Linux evolucione
rápidamente.
– Microsoft lanzó Windows NT, una
versión de Windows para servidores y estaciones de
trabajo (es, por ello, rival de los sistemas operativos
Unix).
1994
– En marzo se lanzó la primera versión 'completa'
del sistema operativo de Torvalds: Linux 1.0. Esta
versión ofreció soporte a redes de computadores,
e incluyó docenas de utilidades, programas de desarrollo
de aplicaciones y otras herramientas.
– Se fundó Red Hat Software, una empresa que
hoy es el principal distribuidor de Linux. Aunque Linux se
puede bajar gratis de Internet, hay docenas de empresas
–como Red Hat Software y Caldera– que elaboran sus
propias versiones, y las venden en CD-ROM,
junto con manuales,
soporte técnico y programas adicionales (esto es lo que
se conoce en el mundo de Linux como una distribución). Estas distribuciones
cuestan entre 10 y 70 dólares, dependiendo de la
empresa.
– Este año Linux completó aproximadamente 100.000
usuarios.
1995
– En agosto, Microsoft lanzó Windows
95.
– A finales de este año Linux tenía
aproximadamente 500.000 usuarios.
1996
– El 9 de junio se lanzó la versión 2.0 de Linux.
Una de las principales novedades fue el soporte a
multiprocesamiento simétrico (el sistema aprovechaba el
poder de computadores con más de un
procesador).
Además, Linux 2.0 no solo trabajaba en PC con
procesadores Intel x86 (como el 386, 486 y Pentium),
sino también en estaciones de trabajo con procesadores
Alpha.
– Se calcula que este año Linux completó 1,5
millones de usuarios.
1997
– Linus Torvalds se fue a vivir a Santa Clara (California,
Estados
Unidos), debido a que fue contratado por una
compañía llamada Transmeta (es una empresa de
chips, que no está relacionada con Linux). Sin embargo,
Torvalds continuó encabezando el equipo de gente que se
encarga del desarrollo del kernel de Linux.
– La firma de investigaciones
Datapro dijo que Linux era el segundo sistema operativo
más popular en los servidores web de
Internet, después de Solaris (un sistema Unix de Sun
Microsystems).
– Se estima que Linux completó 3,5 millones de usuarios.
Este año se lanzó la versión
2.1.
1998
– Varios de los principales fabricantes de programas para el
mercado
corporativo, como Oracle,
Informix, Computer Associates (CA) y Netscape, anunciaron que
lanzarán versiones para Linux de sus productos.
El respaldo de estas empresas ha sido clave para la
consolidación de Linux en las empresas.
– En junio, Microsoft lanzó Windows
98.
– En septiembre, Intel Corporation y Netscape anunciaron una
inversión de capital en
la empresa Red
Hat Software. Este hecho fue muy importante para aumentar la
credibilidad de Linux, debido a que Intel y Netscape son dos de
los líderes de la industria de
los computadores.
– En diciembre, Corel Corporation lanzó una
versión para Linux de su procesador de palabra
WordPerfect 8.
El programa se colocó en Internet para que los usuarios
lo pudieran probar gratis durante 90 días, y en los
primeros seis meses lo bajaron un millón de
personas.
– A finales de 1998, Linux dominaba cerca del 17 por ciento del
mercado de
sistemas operativos para redes, según la empresa de
investigación de mercados International
Data Corporation (IDC).
– Se calcula que Linux completó 7,5 millones de
usuarios. Y el número de programadores que participan en
el desarrollo y pruebas del
programa creció a 10.000.
1999
– En enero se lanzó la versión 2.2 de Linux, que
ofreció un mejor rendimiento y soporte para procesadores
Sparc, Motorola 68000, PowerPC y MIPS. Esta versión, al
igual que la 2.0, soporta computadores con 8 procesadores, pero
el multiprocesamiento es mucho
más eficiente en la versión 2.2.
– Corel Corporation anunció que antes de terminar este
año lanzará Corel Linux, una distribución de Linux dirigida a usuarios
de PC. Aunque hay muchas empresas que ofrecen versiones
comerciales de Linux, esta tiene gran relevancia por estar
dirigida a usuarios
comunes y por ser producida por uno de los más grandes
fabricantes de software del mundo. Corel también dijo
que en el año 2000 lanzará una versión
para Linux del programa gráfico más importante
del mundo Windows, CorelDraw, lo mismo que una versión
de su paquete de programas Corel WordPerfect Suite.
– Linus Torvalds dijo que a finales de 1999 se lanzará
la versión 2.4 del kernel de Linux. La versión
2.4 (la actual es la 2.2.11) mejorará el soporte a
multiprocesamiento simétrico, y soportará
tecnologías como Universal Serial Bus (USB) y
PCMCIA (actualmente tienen soporte, pero por medio de programas
adicionales).
– Actualmente, Linux tiene gran acogida y un futuro prometedor.
Se calcula que cuenta con más de diez millones de
usuarios. Además, trabaja en los principales tipos de
procesadores: Intel x86, Motorola 680×0, MIPS, PowerPC (los que
usan los Macintosh),
Alpha y Sparc (estos dos últimos son procesadores de 64
bits, más potentes que los chips Intel x86). Incluso,
hay una versión que funciona en el computador
de mano PalmPilot. De otro lado, varios de los principales
fabricantes de computadores, como Dell Computer, Compaq y
Hewlett-Packard, venden equipos que traen Linux
preinstalado.
ANEXO II
Estudio sobre virus
informáticos
El nuevo escenario
informático.
Uno de los cambios más sorprendentes del mundo
de hoy es la rapidez de las comunicaciones. Modernos sistemas permiten que
el flujo de conocimientos sea independiente del lugar
físico en que nos encontremos. Ya no nos sorprende la
transferencia de información en tiempo real o
instantáneo. Se dice que el
conocimiento es poder; para adquirirlo, las empresas se han
unido en grandes redes internacionales para transferir datos,
sonidos e imágenes, y realizan el comercio en
forma electrónica, para ser más eficientes. Pero
al unirse en forma pública, se han vuelto vulnerables,
pues cada sistema de computadoras involucrado en la red es un
blanco potencial y apetecible para obtener
información.
El escenario electrónico actual es que las
organizaciones
están uniendo sus redes internas a la Internet, la que
crece a razón de más de un 10% mensual. Al unir
una red a la Internet se tiene acceso a las redes de otras
organizaciones
también unidas. De la misma forma en que accedemos la
oficina del
frente de nuestra empresa, se puede recibir información
de un servidor en Australia, conectarnos a una supercomputadora
en Washington o revisar la literatura
disponible desde Alemania.
Del universo de
varias decenas de millones de computadoras interconectadas, no
es difícil pensar que puede haber más de una
persona con perversas intenciones respecto de una
organización. Por eso, se debe tener la red protegida
adecuadamente.
Cada vez es más frecuente encontrar noticias
referentes a que redes de importantes organizaciones han sido
violadas por criminales informáticos desconocidos. A
pesar de que la prensa ha
publicitado que tales intrusiones son solamente obra de
adolescentes
con propósitos de entretenerse o de jugar, ya no se
trata de un incidente aislado de una desafortunada
institución. A diario se reciben reportes los ataques a
redes informáticas, los que se han vuelto cada vez
más siniestros: los archivos son alterados
subrepticiamente, las computadoras se vuelven inoperativas, se
ha copiado información confidencial sin
autorización, se ha reemplazado el software para agregar
"puertas traseras" de entrada, y miles de contraseñas
han sido capturadas a usuarios inocentes.
Los administradores de sistemas deben gastar horas y a
veces días enteros volviendo a cargar o reconfigurando
sistemas comprometidos, con el objeto de recuperar la confianza
en la integridad del sistema. No hay manera de saber los
motivos que tuvo el intruso, y debe suponerse que sus
intenciones son lo peor. Aquella gente que irrumpe en los
sistemas sin autorización, aunque sea solamente para
mirar su estructura, causa mucho daño, incluso sin que
hubieran leído la correspondencia confidencial y sin
borrar ningún archivo.
Uno de los cambios más sorprendentes del mundo
de hoy es la rapidez de las comunicaciones. Modernos sistemas
permiten que el flujo de conocimientos sea independiente del
lugar físico en que nos encontremos. Ya no nos sorprende
la transferencia de información en tiempo real o
instantáneo. Se dice que el conocimiento
es poder; para adquirirlo, las empresas se han unido en grandes
redes internacionales para transferir datos, sonidos e imágenes, y realizan el comercio en
forma electrónica, para ser más eficientes. Pero
al unirse en forma pública, se han vuelto vulnerables,
pues cada sistema de computadoras involucrado en la red es un
blanco potencial y apetecible para obtener
información.
El escenario electrónico actual es que las
organizaciones están uniendo sus redes internas a la
Internet, la que crece a razón de más de un 10%
mensual.
Al unir una red a la Internet se tiene acceso a las
redes de otras organizaciones también unidas. De la
misma forma en que accedemos la oficina del
frente de nuestra empresa, se puede recibir información
de un servidor en Australia, conectarnos a una supercomputadora
en Washington o revisar la literatura
disponible desde Alemania.
Del universo de
varias decenas de millones de computadoras interconectadas, no
es difícil pensar que puede haber más de una
persona con perversas intenciones respecto de una
organización. Por eso, se debe tener nuestra red
protegida adecuadamente.
Cada vez es más frecuente encontrar noticias
referentes a que redes de importantes organizaciones han sido
violadas por criminales informáticos desconocidos. A
pesar de que la prensa ha
publicitado que tales intrusiones son solamente obra de
adolescentes
con propósitos de entretenerse o de jugar, ya no se
trata de un incidente aislado de una desafortunada
institución. A diario se reciben reportes los ataques a
redes informáticas, los que se han vuelto cada vez
más siniestros: los archivos son alterados
subrepticiamente, las computadoras se vuelven inoperativas, se
ha copiado información confidencial sin
autorización, se ha reemplazado el software para agregar
"puertas traseras" de entrada, y miles de contraseñas
han sido capturadas a usuarios inocentes.
Los administradores de sistemas deben gastar horas y a
veces días enteros volviendo a cargar o reconfigurando
sistemas comprometidos, con el objeto de recuperar la confianza
en la integridad del sistema. No hay manera de saber los
motivos que tuvo el intruso, y debe suponerse que sus
intenciones son lo peor. Aquella gente que irrumpe en los
sistemas sin autorización, aunque sea solamente para
mirar su estructura, causa mucho daño, incluso sin que
hubieran leído la correspondencia confidencial y sin
borrar ningún archivo.
De acuerdo a un estudio de la Consultora "Ernst and
Young" abarcando más de mil empresas, un 20% reporta
pérdidas financieras como consecuencia de intrusiones en
sus computadoras (Technology Review, Abril 95, pg.33). Ya
pasaron los tiempos en que la seguridad de las computadoras era
sólo un juego o
diversión.
¿cómo nacieron los
virus?.
Hacia finales de los años 60, Douglas McIlory,
Victor Vysottsky y Robert Morris idearon un juego al que
llamaron Core War (Guerra en lo
Central, aludiendo a la memoria de la computadora), que se
convirtió en el pasatiempo de algunos de los
programadores de los laboratorios Bell de AT&T.
El juego consistía en que dos jugadores
escribieran cada uno un programa llamado organismo, cuyo
hábitat fuera la memoria de la computadora. A partir de
una señal, cada programa intentaba forzar al otro a
efectuar una instrucción inválida, ganando el
primero que lo consiguiera.
Al término del juego, se borraba de la memoria
todo rastro de la batalla, ya que estas actividades eran
severamente sancionadas por los jefes por ser un gran riesgo dejar un
organismo suelto que pudiera acabar con las aplicaciones
del día siguiente. De esta manera surgieron los
programas destinados a dañar en la escena de la
computación.
Uno de los primeros registros que se tienen de una
infección data del año 1987, cuando en la
Universidad
estadounidense de Delaware notaron que tenían un virus
porque comenzaron a ver "© Brain" como etiqueta de los
disquetes.
La causa de ello era Brain Computer Services, una casa
de computación paquistaní que, desde 1986,
vendía copias ilegales de software comercial infectadas
para, según los responsables de la firma, dar una
lección a los piratas.
Ellos habían notado que el sector de booteo de
un disquete contenía código ejecutable, y que
dicho código se ejecutaba cada vez que la máquina
se inicializaba desde un disquete.
Lograron reemplazar ese código por su propio
programa, residente, y que este instalara una réplica de
sí mismo en cada disquete que fuera utilizado de
ahí en más.
También en 1986, un programador llamado Ralf
Burger se dio cuenta de que un archivo podía ser creado
para copiarse a sí mismo, adosando una copia de
él a otros archivos. Escribió una
demostración de este efecto a la que llamó
VIRDEM, que podía infectar cualquier archivo con
extensión .COM.
Esto atrajo tanto interés
que se le pidió que escribiera un libro, pero,
puesto que él desconocía lo que estaba ocurriendo
en Paquistán, no mencionó a los virus de sector
de arranque (boot sector). Para ese entonces, ya se
había empezado a diseminar el virus Vienna.
Actualmente, los virus son producidos en cantidades
extraordinarias por muchisima gente alrededor del planeta.
Algunos de ellos dicen hacerlo por divertimento, otros
quizás para probar sus habilidades. De cualquier manera,
hasta se ha llegado a notar un cierto grado de competitividad entre los autores de estos
programas.
Con relación a la
motivación de los autores de virus para llevar a
cabo su obra, existe en Internet un documento escrito por un
escritor freelance Markus Salo, en el cual, entre otros, se
exponen los siguientes conceptos:
- Algunos de los programadores de virus, especialmente
los mejores, sostienen que su interés por el tema es
puramente científico, que desean averiguar todo lo que
se pueda sobre virus y sus usos. - A diferencia de las compañías de
software, que son organizaciones relativamente aisladas unas de
otras (todas tienen secretos que no querrían que sus
competidores averiguaran) y cuentan entre sus filas con
mayoría de estudiantes graduados, las agrupaciones de
programadores de virus están abiertas a cualquiera que
se interese en ellas, ofrecen consejos, camaradería y
pocas limitaciones. Además, son libres de seguir
cualquier objetivo que les parezca, sin temer por la
pérdida de respaldo económico. - El hecho de escribir programas vírales da al
programador cierta fuerza
coercitiva, lo pone fuera de las reglas convencionales de
comportamiento. Este factor es uno de los
más importantes, pues el sentimiento de pertenencia es
algo necesario para todo ser humano, y es probado que dicho
sentimiento pareciera verse reforzado en situaciones
marginales. - Por otro lado, ciertos programadores parecen intentar
legalizar sus actos poniendo sus creaciones al alcance de mucha
gente, (vía Internet, BBS especializadas, etc.) haciendo
la salvedad de que el material es peligroso, por lo cual el
usuario debería tomar las precauciones del
caso. - Existen programadores, de los cuales, generalmente,
provienen los virus más destructivos, que alegan que sus
programas son creados para hacer notoria la falta de
protección de que sufren la mayoría de los
usuarios de computadoras. - La gran mayoría de estos individuos son del
mismo tipo de gente que es reclutada por los grupos
terroristas: hombres, adolescentes, inteligentes.
En definitiva, sea cual fuere el motivo por el cual se
siguen produciendo virus, se debe destacar que su existencia no
ha sido sólo perjuicios: gracias a ellos, mucha gente a
tomado conciencia
de qué es lo que tiene y cómo
protegerlo.
¿Qué es un
virus?.
Es un pequeño programa escrito intencionalmente
para instalarse en la computadora de un usuario sin el
conocimiento o el permiso de este. Decimos que es un
programa parásito porque el programa ataca a los
archivos o sector es de "booteo" y se replica a sí mismo
para continuar su esparcimiento.
Algunos se limitan solamente a replicarse, mientras
que otros pueden producir serios daños que pueden
afectar a los sistemas. Se ha llegado a un punto tal, que un
nuevo virus llamado W95/CIH-10xx. o también como
CIH.Spacefiller (puede aparecer el 26 de cada mes,
especialmente 26 de Junio y 26 de Abril) ataca al BIOS de la
PC huésped y cambiar su configuración de tal
forma que se requiere cambiarlo. Nunca se puede asumir que un
virus es inofensivo y dejarlo "flotando" en el
sistema.
Existen ciertas analogías entre los virus
biológicos y los informáticos: mientras los
primeros son agentes externos que invaden células
para alterar su información genética y reproducirse, los segundos son
programas-rutinas, en un sentido más estricto, capaces
de infectar archivos de computadoras, reproduciéndose
una y otra vez cuando se accede a dichos archivos,
dañando la información existente en la memoria o
alguno de los dispositivos de
almacenamiento del ordenador.
Tienen diferentes finalidades: Algunos sólo
'infectan', otros alteran datos, otros los eliminan, algunos
sólo muestran mensajes. Pero el fin último de
todos ellos es el mismo: PROPAGARSE.
Es importante destacar que el potencial de
daño de un virus
informático no depende de su complejidad sino del
entorno donde actúa.
La definición más simple y completa que
hay de los virus corresponde al modelo D. A. S., y se
fundamenta en tres características, que se refuerzan y
dependen mutuamente. Según ella, un virus es un programa
que cumple las siguientes pautas:
- Es dañino
- Es autorreproductor
- Es subrepticio
El hecho de que la definición imponga que los
virus son programas no admite ningún tipo de observación; está extremadamente
claro que son programas, realizados por personas. Además
de ser programas tienen el fin ineludible de causar daño
en cualquiera de sus formas.
Asimismo, se pueden distinguir tres módulos
principales de un virus
informático:
- Módulo de Reproducción
- Módulo de Ataque
- Módulo de Defensa
El módulo de reproducción se
encarga de manejar las rutinas de "parasitación" de
entidades ejecutables (o archivos de datos, en el caso de los
virus macro) a fin de que el virus pueda ejecutarse
subrepticiamente. Pudiendo, de esta manera, tomar control del
sistema e infectar otras entidades permitiendo se traslade de
una computadora a otra a través de algunos de estos
archivos.
El módulo de ataque es optativo. En caso
de estar presente es el encargado de manejar las rutinas de
daño adicional del virus. Por ejemplo, el conocido virus
Michelangelo, además de producir los daños
que se detallarán más adelante, tiene un
módulo de ataque que se activa cuando el reloj de la
computadora indica 6 de Marzo. En estas condiciones la rutina
actúa sobre la información del disco
rígido volviéndola inutilizable.
El módulo de defensa tiene, obviamente,
la misión
de proteger al virus y, como el de ataque, puede estar o no
presente en la estructura. Sus rutinas apuntan a evitar todo
aquello que provoque la remoción del virus y retardar,
en todo lo posible, su detección.
Tipos de virus.
Los virus se clasifican por el modo en que
actúan infectando la computadora:
- Programa: Infectan archivos ejecutables tales como
.com / .exe / .ovl / .drv / .sys / .bin - Boot: Infectan los sectores Boot Record, Master Boot, FAT y la Tabla de
Partición. - Múltiples: Infectan programas y sectores de
"booteo". - Bios: Atacan al Bios para
desde allí reescribir los discos duros. - Hoax: Se distribuyen por e-mail y la única
forma de eliminarlos es el uso del sentido
común.
Al respecto, se trata de virus que no existe y que se
utiliza para aterrar a los novatos especialmente en la Internet
a pesar que los rumores lo muestran como algo muy serio y a
veces la información es tomada por la prensa
especializada.
Por lo general, como ya se expresó, la
difusión se hace por cadenas de e-mail con terribles e
inopinadas advertencias. En realidad el único virus es
el mensaje. A continuación se dan una serie de supuestos
"virus", por lo que es aconsejable ignorar los mensajes que
aparecen y no ayudar a replicarlos continuando con la
cadena:
- 3b Trojan (alias PKZIP Virus).
- AOL4Free Virus Hoax.
- Baby New Year Virus Hoax.
- BUDDYLST.ZIP
- BUDSAVER.EXE
- Budweiser Hoax
- Death69
- Deeyenda
- E-Flu
- FatCat Virus Hoax
- Free Money
- Get More Money Hoax
- Ghost
- Good Times
- Hacky Birthday Virus Hoax
- Hairy Palms Virus Hoax
- Irina
- Join the Crew
- Londhouse Virus Hoax
- Microsoft Virus Hoax
- Millenium Time Bomb
- Penpal Greetings
- Red Alert
- Returned or Unable to Deliver
- Teletubbies
- Time Bomb
- Very Cool
- Win a Holiday
- World Domination Hoax
- Yellow Teletubbies
- A.I.D.S. hoax email virus
- AltaVista virus scare
- AOL riot hoax email
- ASP virus hoax
- Back Orifice Trojan horse
- Bill Gates hoax
- Bloat, see MPEG virus hoax
- Budweiser frogs screen-saver scare
- Good Times hoax email virus
- Irina hoax virus
- Java virus scare
- Join the Crew hoax email virus
- 'Millennium' virus misunderstanding
- MPEG virus hoax
- 'My clock says 2097/2098' virus
misunderstanding - New virus debug device hoax email virus with attached
Trojan horse - Open: Very Cool, see A.I.D.S. hoax email
virus - Penpal Greetings, see Good Times hoax email
virus - PKZ300 Trojan virus scare
- Returned or Unable to Deliver hoax email
virus - Walt Disney greeting, see Bill Gates
hoax - Win a Holiday hoax email virus
- Windows ’98 MS Warning.
Por último, cabe destacar que los HOAX
están diseñados únicamente para asustar a
los novatos (y a los que no lo son tanto). Otros como el
mensaje del carcinoma cerebral de Jessica, Jessica
Mydek, Anabelle, Ana, Billy y otros
personajes imaginarios tampoco son reales como tampoco lo es la
dirección ,
ya que fueron creados para producir congestionamiento en la
Internet.
Características de los virus.
El virus es un pequeño software (cuanto
más pequeño más fácil de esparcir y
más difícil de detectar), que permanece inactivo
hasta que un hecho externo hace que el programa sea ejecutado o
el sector de "booteo" sea leído. De esa forma el
programa del virus es activado y se carga en la memoria de la
computadora, desde donde puede esperar un evento que dispare su
sistema de destrucción o se replique a sí
mismo.
Los más comunes son los residentes en la
memoria que pueden replicarse fácilmente en los
programas del sector de "booteo", menos comunes son los
no-residentes que no permanecen en la memoria después
que el programa-huesped es cerrado.
Los virus pueden llegar a "camuflarse" y esconderse
para evitar la detección y reparación. Como lo
hacen:
- El virus re-orienta la lectura
del disco para evitar ser detectado; - Los datos sobre el tamaño del directorio
infectado son modificados en la FAT, para evitar que se
descubran bytes extra que aporta el virus; - encriptamiento: el virus se encripta en
símbolos sin sentido para no ser detectado, pero para
destruir o replicarse DEBE desencriptarse siendo
entonces detectable; - polimorfismo: mutan cambiando segmentos del
código para parecer distintos en cada "nueva
generación", lo que los hace muy difíciles de
detectar y destruir; - Gatillables: se relaciona con un evento que puede ser
el cambio de fecha, una determinada combinación de
tecleo; un macro o la apertura de un programa asociado al virus
(Troyanos).
Los virus se transportan a través de programas
tomados de BBS (Bulletin Boards) o copias de software no
original, infectadas a propósito o accidentalmente.
También cualquier archivo que contenga "ejecutables" o
"macros" puede
ser portador de un virus: downloads de programas de lugares
inseguros; e-mail con "attachments", archivos de MS-Word y
MS-Excel con
macros.
Inclusive ya existen virus que se distribuyen con MS-Power Point.
Los archivos de datos, texto o
Html NO
PUEDEN contener virus, aunque pueden ser dañados por
estos.
Los virus de sectores de "booteo" se instalan en esos
sectores y desde allí van saltando a los sectores
equivalentes de cada uno de los drivers de la PC. Pueden
dañar el sector o sobreescribirlo. Lamentablemente
obligan al formateo del disco del drive infectado. Incluyendo
discos de 3.5" y todos los tipos de Zip de Iomega, Sony y 3M.
(No crean vamos a caer en el chiste fácil de decir que
el más extendido de los virus de este tipo se llama
MS
Windows 98).
En cambio los virus de programa, se manifiestan cuando
la aplicación infectada es ejecutada, el virus se activa
y se carga en la memoria, infectando a cualquier programa que
se ejecute a continuación. Puede solaparse infecciones
de diversos virus que pueden ser destructivos o permanecer
inactivos por largos periodos de tiempo.
Daños de los
virus.
Definiremos daño como acción una
indeseada, y los clasificaremos según la cantidad de
tiempo necesaria para reparar dichos daños. Existen seis
categorías de daños hechos por los virus, de
acuerdo a la gravedad.
Sirva como ejemplo la forma de trabajo del virus
FORM (el más común): En el día 18
de cada mes cualquier tecla que presionemos hace sonar el
beep. Deshacerse del virus implica, generalmente, segundos o
minutos.- DAÑOS TRIVIALES.
Un buen ejemplo de este tipo de daño es el
JERUSALEM. Este virus borra, los viernes 13, todos los
programas que uno trate de usar después de que el
virus haya infectado la memoria residente. En el peor de los
casos, tendremos que reinstalar los programas perdidos. Esto
nos llevará alrededor de 30 minutos. - DAÑOS MENORES.
Cuando un virus formatea el disco rígido,
mezcla los componentes de la FAT (File Allocation
Table, Tabla de Ubicación de Archivos), o sobreescribe
el disco rígido. En este caso, sabremos inmediatamente
qué es lo que está sucediendo, y podremos
reinstalar el sistema operativo y utilizar el último
backup. Esto quizás nos lleve una hora. - DAÑOS MODERADOS.
Algunos virus, dada su lenta velocidad de
infección y su alta capacidad de pasar desapercibidos,
pueden lograr que ni aún restaurando un backup
volvamos al último estado de los datos. Un ejemplo de
esto es el virus DARK AVENGER, que infecta archivos y
acumula la cantidad de infecciones que realizó. Cuando
este contador llega a 16, elige un sector del disco al azar y
en él escribe la frase: "Eddie lives …
somewhere in time" (Eddie vive … en algún
lugar del tiempo).Esto puede haber estado pasando por un largo tiempo
sin que lo notemos, pero el día en que detectemos la
presencia del virus y queramos restaurar el último
backup notaremos que también él contiene
sectores con la frase, y también los backups
anteriores a ese.Puede que lleguemos a encontrar un backup limpio,
pero será tan viejo que muy probablemente hayamos
perdido una gran cantidad de archivos que fueron creados con
posterioridad a ese backup. - DAÑOS MAYORES.
Los daños severos son hechos cuando un virus
realiza cambios mínimos, graduales y progresivos. No
sabemos cuándo los datos son correctos o han cambiado,
pues no hay pistas obvias como en el caso del DARK
AVENGER (es decir, no podemos buscar la frase Eddie
lives …). - DAÑOS SEVEROS.
- DAÑOS ILIMITADOS.
Algunos programas como CHEEBA,
VACSINA.44.LOGIN y GP1 entre otros, obtienen la
clave del administrador del sistema y la pasan a un tercero.
Cabe aclarar que estos no son virus sino troyanos. En el caso
de CHEEBA, crea un nuevo usuario con los privilegios
máximos, fijando el nombre del usuario y la clave. El
daño es entonces realizado por la tercera persona, quien
ingresará al sistema y haría lo que
quisiera.
Síntomas típicos de una
infección.
- El sistema operativo o un programa toma mucho tiempo
en cargar sin razón aparente. - El tamaño del programa cambia sin razón
aparente. - El disco duro se queda sin espacio o reporta falta de
espacio sin que esto sea necesariamente así. - Si se corre el CHKDSK no muestra "655360 bytes
available". - En Windows aparece "32 bit error".
- La luz del disco
duro en la CPU continua parpadeando aunque no se este
trabajando ni haya protectores de pantalla activados. (Se debe
tomar este síntoma con mucho cuidado, porque no siempre
es así). - No se puede "bootear" desde el Drive A, ni siquiera
con los discos de rescate. - Aparecen archivos de la nada o con nombres y
extensiones extrañas. - Suena "clicks" en el teclado (este sonido es
particularmente aterrador para quien no esta
advertido). - Los caracteres de texto se
caen literalmente a la parte inferior de la pantalla
(especialmente en DOS). - En la pantalla del monitor
pueden aparecen mensajes absurdos tales como "Tengo hambre.
Introduce un Big Mac en el Drive A". - En el monitor aparece una pantalla con un fondo de
cielo celeste, unas nubes blancas difuminadas, una ventana de
vidrios repartidos de colores y una
leyenda en negro que dice Windows ’98 (No puedo evitarlo,
es mas fuerte que yo…!!).
Una infección se soluciona con las llamadas
"vacunas"
(que impiden la infección) o con los remedios que
desactivan y eliminan, (o tratan de hacerlo) a los virus de los
archivos infectados. Hay cierto tipo de virus que no son
desactivables ni removibles, por lo que se debe destruir el
archivo infectado.
Virus informáticos
argentinos.
Al igual que todos los países informatizados,
la Argentina
cuenta con una producción local de virus
informáticos.
Si bien estos no son de los más complejos (en
su mayoría, buenas copias y variaciones de virus
conocidos) representan un problema, ya que muchos de ellos no
están incluidos en las bases de datos de los programas
antivirus.
Veamos algunos ejemplos:
- PING PONG:
Este virus fue el primero en hacer explosión en
Argentina. Fue
descubierto en marzo de 1988 y en poco tiempo estuvo en nuestro
país, en donde se convirtió rápidamente en
epidemia.
La falta de conocimiento
sobre los virus ayudó a que se diseminara ampliamente y
fuera incontrolable en un principio. En centros universitarios
como la Facultad de Ciencias
Exactas de la UBA o la Facultad de Informática de la
Universidad de Morón era difícil encontrar un
disco sin infectar.
Ese mismo desconocimiento llevó a que pasara
bastante tiempo hasta que se empezaran a tomar medidas.
Sólo después de algunos meses, en revistas
especializadas en informática, empezaron a publicarse
formas de desinfectar los discos, y como consecuencia de ello
se aplicaron políticas de seguridad en las
universidades.
Lo positivo de esto fue que la gente comenzara a
conocer el D.O.S. más profundamente, por ejemplo el boot
sector: qué es y para qué sirve, ya que las
máquinas eran utilizadas pero pocos sabían
cómo funcionaban realmente.
Como tenía un síntoma muy evidente (una
pelotita que rebotaba), se pensó que todos los virus
debían ser visibles, pero los siguientes fueron
más subrepticios, y se limitaban a reproducirse o
destruir sin avisar al usuario.
El Ping Pong original no podía infectar discos
rígidos, pero la versión que se popularizó
en el país fue la B, que sí podía hacerlo.
Se creó una variante en Argentina, que probablemente fue
la primera variante de virus originada en el país, el
Ping Pong C, que no mostraba la pelotita en la pantalla. Este
virus está extinto en este momento ya que sólo
podía funcionar en máquinas con procesador 8088
ó 8086, porque ejecutaba una instrucción no
documentada en estos e incorrecta en los modelos
siguientes.
- AVISPA:
Escrito en Noviembre de 1993 que en muy poco tiempo se
convirtió en epidemia. Infecta archivos .EXE
Al ejecutarse, si no se encontraba ya residente en
memoria, intenta infectar los archivos XCOPY, MEM, SETVER y
EMM386 para maximizar sus posibilidades de reproducción, ya que estos archivos son
de los más frecuentemente utilizados.
Este virus está encriptado siempre con una
clave distinta (polimórfico), para dificultar su
detección por medio de antivirus
heurísticos.
- MENEM TOCOTO:
Esta adaptación del virus Michelangelo
apareció en 1994. En los disquetes se aloja en el boot
sector, y en los discos rígidos en la tabla de
particiones. Es extremadamente sencillo y, por ende,
fácil de detectar.
- CAMOUFLAGE II:
Aparecido por primera vez en 1993. Infecta el boot
sector de los disquetes ubicados en la unidad A y la tabla de
partición de los discos rígidos. Es bastante
simple y fácil de ser detectado.
- LEPROSO:
Creado en 1993, en Rosario, provincia de Santa
Fé. Se activa el día 12 de Enero
(cumpleaños del autor), y hace aparecer un mensaje que
dice: "Felicitaciones, su máquina está
infectada por el virus leproso creado por J. P.. Hoy es mi
cumpleaños y lo voy a festejar formateando su
rígido. Bye… (Vamos Newell's que con Diego somos
campeones)."
- PINDONGA:
Virus polimórfico residente en memoria que se
activa los días 25 de febrero, 21 de marzo, 27 de agosto
y 16 de septiembre, cuando ataca, borra toda la
información contenida en el disco
rígido.
- TEDY:
Es el primer virus argentino interactivo.
Apareció hace poco tiempo. Infecta archivos con
extensión .EXE, y se caracteriza por hacer una serie de
preguntas al usuario.
Una vez activado, una pantalla muestra:
¡TEDY, el primer virus interactivo de la
computación!
Responda el siguiente cuestionario:
- ¿Los programas que Ud. utiliza son
originales? (s/n) - ¿Los de Microsoft son unos ladrones?
(s/n)
Si se responde afirmativamente a la primer
pregunta, el virus contestará: 5 archivos menos por
mentiroso
En caso contrario:
2 archivos menos por ladrón
En cuanto a la segunda pregunta, el único
mensaje que se ha visto es:
Te doy otra oportunidad para responder
bien.
Con este virus, los archivos infectados aumentan su
tamaño en 4310 bytes.
¿Qué no es un virus?.
Existen algunos programas que, sin llegar a ser virus,
ocasionan problemas al usuario. Estos no-virus carecen
de por lo menos una de las tres características
identificatorias de un virus (dañino, autorreproductor y
subrepticio). Veamos un ejemplo de estos no – virus: "Hace
algunos años, la red de I. B. M., encargada de conectar
más de 130 países, fue virtualmente paralizada
por haberse saturado con un correo
electrónico que contenía un mensaje de
salutación navideña que, una vez leído por
el destinatario, se enviaba a sí mismo a cada integrante
de las listas de distribución de correo del usuario. Al
cabo de un tiempo, fueron tantos los mensajes que esperaban ser
leídos por sus destinatarios que el tráfico se
volvió demasiado alto, lo que ocasionó la
caída de la red".
Asimismo, es necesario aclarar que no todo lo que
altere el normal funcionamiento de una computadora es
necesariamente un virus.
Por ello, daré algunas de las pautas
principales para diferenciar entre qué debe preocuparnos
y qué no:
BUGS (Errores en programas).
Los bugs no son virus, y los virus no son bugs. Todos
usamos programas que tienen graves errores (bugs). Si se
trabaja por un tiempo largo con un archivo muy extenso,
eventualmente algo puede comenzar a ir mal dentro del programa,
y este a negarse a grabar el archivo en el disco. Se pierde
entonces todo lo hecho desde la última grabación.
Esto, en muchos casos, se debe a ERRORES del programa. Todos
los programas lo suficientemente complejos tienen
bugs.
Falsa alarma.
Algunas veces tenemos problemas con nuestro hardware o
software y, luego de una serie de verificaciones, llegamos a la
conclusión de que se trata de un virus, pero nos
encontramos con una FALSA ALARMA luego de correr nuestro
programa antivirus.
Desafortunadamente no hay una regla estricta por la
cual guiarse, pero contestarse las siguientes preguntas puede
ser de ayuda:
- ¿Es sólo un archivo el que reporta la
falsa alarma (o quizás varios, pero copias del
mismo)?. - ¿Solamente un producto
antivirus reporta la alarma? (Otros productos
dicen que el sistema está limpio). - ¿Se indica una falsa alarma después de
correr múltiples productos, pero no después de
bootear, sin ejecutar ningún programa?.
Si al menos una de nuestras respuestas fue afirmativa,
es muy factible que efectivamente se trate de una falsa
alarma.
Programas corruptos.
A veces algunos archivos son accidentalmente
dañados, quizás por problemas de hardware. Esto
quiere decir que no siempre que encontremos daños en
archivos deberemos estar seguros de
estar infectados.
¿Qué es un antivirus?.
No para toda enfermedad existe cura, como tampoco
existe una forma de erradicar todos y cada uno de los virus
existentes.
Es importante aclarar que todo antivirus es un
programa y que, como todo programa, sólo
funcionará correctamente si es adecuado y está
bien configurado. Además, un antivirus es una
herramienta para el usuario y no sólo no será
eficaz para el 100% de los casos, sino que nunca
será una protección total ni
definitiva.
La función
de un programa antivirus es detectar, de alguna manera, la
presencia o el accionar de un virus informático en una
computadora. Este es el aspecto más importante de un
antivirus, independientemente de las prestaciones
adicionales que pueda ofrecer, puesto que el hecho de detectar
la posible presencia de un virus informático, detener
el trabajo y
tomar las medidas necesarias, es suficiente para acotar un buen
porcentaje de los daños posibles. Adicionalmente, un
antivirus puede dar la opción de erradicar un virus
informático de una entidad infectada.
El modelo más primario de las funciones de un
programa antivirus es la detección de su presencia y, en
lo posible, su identificación. La primera técnica
que se popularizó para la detección de virus
informáticos, y que todavía se sigue
utilizando (aunque cada vez con menos eficiencia), es
la técnica de scanning. Esta técnica
consiste en revisar el código de todos los archivos
contenidos en la unidad de almacenamiento -fundamentalmente los
archivos ejecutables- en busca de pequeñas porciones de
código que puedan pertenecer a un virus
informático. Este procedimiento,
denominado escaneo, se realiza a partir de una base de datos
que contiene trozos de código representativos de cada
virus conocido, agregando el empleo de
determinados algoritmos que agilizan los procesos de
búsqueda.
La técnica de scanning fue bastante
eficaz en los primeros tiempos de los virus
informáticos, cuando había pocos y su
producción era pequeña. Este relativamente
pequeño volumen de
virus informáticos permitía que los
desarrolladores de antivirus escaneadores tuvieran tiempo de
analizar el virus, extraer el pequeño trozo de
código que lo iba a identificar y agregarlo a la
base de
datos del programa para lanzar una nueva versión.
Sin embargo, la obsolescencia de este mecanismo de
identificación como una solución antivirus
completa se encontró en su mismo modelo.
El primer punto grave de este sistema radica en que
siempre brinda una solución a posteriori: es
necesario que un virus informático alcance un grado de
dispersión considerable para que sea enviado (por
usuarios capacitados, especialistas o distribuidores del
producto) a
los desarrolladores de antivirus. Estos lo analizarán,
extraerán el trozo de código que lo
identificará, y lo incluirán en la próxima
versión de su programa antivirus. Este proceso puede
demorar meses a partir del momento en que el virus comienza a
tener una dispersión considerable, lapso en el cual
puede causar graves daños sin que pueda ser
identificado.
Además, este modelo consiste en una
sucesión infinita de soluciones parciales y
momentáneas (cuya sumatoria jamás
constituirá una solución definitiva), que
deben actualizarse periódicamente debido a la
aparición de nuevos virus.
En síntesis, la técnica de scanning
es altamente ineficiente, pero se sigue utilizando debido a que
permite identificar rápidamente la presencia de los
virus más conocidos y, como son estos los de mayor
dispersión, permite una importante gama de
posibilidades.
Un ejemplo típico de un antivirus de esta clase
es el Viruscan de McAfee, que se verá más
adelante.
En virtud del pronto agotamiento técnico de la
técnica de scanning, los desarrolladores de programas
antivirus han dotado a sus creaciones de métodos para
búsquedas de virus informáticos (y de sus
actividades), que no identifican específicamente al
virus sino a algunas de sus características generales y
comportamientos universalizados.
Este tipo de método
rastrea rutinas de alteración de información que
no puedan ser controladas por el usuario, modificación
de sectores críticos de las unidades de
almacenamiento (master boot record, boot sector, FAT, entre
otras), etc.
Un ejemplo de este tipo de métodos es el que
utiliza algoritmos heurísticos.
De hecho, esta naturaleza de
procedimientos busca, de manera bastante eficiente,
códigos de instrucciones potencialmente pertenecientes a
un virus informático. Resulta eficaz para la
detección de virus conocidos y es una de las soluciones
utilizadas por los antivirus para la detección de nuevos
virus. El inconveniente que presenta este tipo de algoritmo
radica en que puede llegar a sospecharse de muchisimas cosas
que no son virus. Esto hace necesario que el usuario que lo
utiliza conozca un poco acerca de la estructura del sistema
operativo, a fin de poseer herramientas que le faciliten una
discriminación de cualquier falsa alarma
generada por un método heurístico.
Algunos de los antivirus de esta clase son F-Prot,
Norton Anti Virus y Dr. Solomon's Toolkit.
Ahora bien, otra forma de detectar la presencia de un
virus informático en un sistema consiste en monitorear
las actividades de la PC señalando si algún
proceso intenta modificar los sectores críticos de los
dispositivos de
almacenamiento o los archivos ejecutables. Los programas
que realizan esta tarea se denominan chequeadores de
integridad.
Sobre la base de estas consideraciones, podemos
consignar que un buen sistema antivirus debe estar
compuesto por un programa detector de virus -que siempre
esté residente en memoria- y un programa que
verifique la integridad de los sectores críticos del
disco rígido y sus archivos ejecutables. Existen
productos antivirus que cubren los dos aspectos, o bien pueden
combinarse productos diferentes configurados de forma que no se
produzcan conflictos
entre ellos.
Modelo antivirus:
La estructura de un programa antivirus, está
compuesta por dos módulos principales: el primero
denominado de control y el segundo denominado de
respuesta. A su vez, cada uno de ellos se divide en varias
partes:
- Módulo de control: posee la
técnica verificación de integridad que
posibilita el registro de cambios en los archivos ejecutables y
las zonas críticas de un disco rígido. Se trata,
en definitiva, de una herramienta preventiva para mantener y
controlar los componentes de información de un disco
rígido que no son modificados a menos que el usuario lo
requiera.
Otra opción dentro de este módulo es la
identificación de virus, que incluye diversas
técnicas para la detección de virus
informáticos. Las formas más comunes de
detección son el scanning y los algoritmos, como por
ejemplo, los heurísticos.
Asimismo, la identificación de código
dañino es otra de las herramientas de
detección que, en este caso, busca instrucciones
peligrosas incluidas en programas, para la integridad de la
información del disco rígido.
Esto implica descompilar (o desensamblar) en forma
automática los archivos almacenados y ubicar sentencias
o grupos de
instrucciones peligrosas.
Finalmente, el módulo de control también
posee una administración de recursos para
efectuar un monitoreo de las rutinas a través de las
cuales se accede al hardware de la computadora (acceso a disco,
etc.). De esta manera puede limitarse la acción de un
programa restringiéndole el uso de estos recursos, como
por ejemplo impedir el acceso a la escritura de zonas
críticas del disco o evitar que se ejecuten funciones de
formato del mismo.
- Módulo de respuesta: la función
alarma se encuentra incluida en todos los programas
antivirus y consiste en detener la acción del sistema
ante la sospecha de la presencia de un virus
informático, e informar la situación a
través de un aviso en pantalla.
Algunos programas antivirus ofrecen, una vez detectado
un virus informático, la posibilidad de erradicarlo. Por
consiguiente, la función reparar se utiliza como
una solución momentánea para mantener la
operatividad del sistema hasta que pueda instrumentarse una
solución adecuada. Por otra parte, existen dos
técnicas para evitar el contagio de entidades
ejecutables: evitar que se contagie todo el programa o
prevenir que la infección se expanda más
allá de un ámbito fijo.
Aunque la primera opción es la más
adecuada, plantea grandes problemas de
implementación.
Detección y
prevención.
Debido a que los virus informáticos son cada
vez más sofisticados, hoy en día es
difícil sospechar su presencia a través de
síntomas como la pérdida de performance. De todas
maneras la siguiente es una lista de síntomas que pueden
observarse en una computadora de la que se sospeche esté
infectada por alguno de los virus más
comunes:
- Operaciones de procesamiento más
lentas. - Los programas tardan más tiempo en
cargarse. - Los programas comienzan a acceder por momentos a las
disqueteras y/o al disco rígido. - Disminución no justificada del espacio
disponible en el disco rígido y de la memoria RAM
disponible, en forma constante o repentina. - Aparición de programas residentes en memoria
desconocidos.
La primera medida de prevención a ser tenida en
cuenta es, como se dijo anteriormente, contar con un sistema
antivirus y utilizarlo correctamente. Por lo tanto, la
única forma de que se constituya un bloqueo eficaz para
un virus es que se utilice con determinadas normas y
procedimientos. Estas normas tienden
a controlar la entrada de archivos al disco rígido de la
computadora, lo cual se logra revisando con el antivirus todos
los disquetes o medios de almacenamiento en general y, por
supuesto, disminuyendo al mínimo posible todo tipo de
tráfico.
Además de utilizar un sistema antivirus y
controlar el tráfico de archivos al disco rígido,
una forma bastante eficaz de proteger los archivos
ejecutables es utilizar un programa chequeador de
integridad que verifique que estos archivos no sean
modificados, es decir, que mantengan su estructura. De esta
manera, antes que puedan ser parasitados por un virus
convencional, se impediría su accionar.
Para prevenir la infección con un virus de
sector de arranque, lo más indicado es no dejar
disquetes olvidados en la disquetera de arranque y contar con
un antivirus. Pero, además, puede aprovecharse una
característica que incorpora el setup de las
computadoras más modernas: variar la secuencia de
arranque de la PC a "primero disco rígido y luego
disquetera" (C, A). De esta manera, la computadora no
intentará leer la disquetera en el arranque aunque tenga
cargado un disquete.
Algunos distribuidores o representantes de programas
antivirus envían muestras de los nuevos virus argentinos
a los desarrolladores del producto para que los estudien o
incluyan en sus nuevas versiones o upgrades, con la demora que
esto implica.
En consecuencia, la detección alternativa a la
de scanning y las de chequeo de actividad e integridad resultan
importantes, ya que pueden detectar la presencia de un virus
informático sin la necesidad de identificarlo. Y esta es
la única forma disponible para el usuario de detectar
virus nuevos, sean nacionales o extranjeros.
De todas maneras, existe una forma de actualizar la
técnica de scanning. La misma consiste en
incorporarle al antivirus un archivo conteniendo cadenas de
caracteres ASCII que
sean trozos de código (strings) significativos del
sector vital de cada nuevo virus que todavía no
esté incorporado en la base de datos del
programa.
De todas formas, esta solución será
parcial: la nueva cadena introducida sólo
identificará al virus, pero no será capaz
de erradicarlo.
Es muy importante que los "strings" que se vayan a
incorporar al antivirus provengan de una fuente confiable ya
que, de lo contrario, pueden producirse falsas alarmas o ser
ineficaces.
Algunos de los antivirus que soportan esta cualidad de
agregar strings son Viruscan, F-Prot y
Thunderbyte.
La NCSA (National Computer Security Association,
Asociación Nacional de Seguridad de Computadoras) es la
encargada de certificar productor antivirus.
Para obtener dicha certificación los productos
deben pasar una serie de rigurosas pruebas
diseñadas para asegurar la adecuada protección
del usuario.
Antiguamente el esquema de certificación
requería que se detectara (incluyendo el número
de versión) el 90 % de la librería de virus del
NCSA, y fue diseñado para asegurar óptimas
capacidades de detección. Pero esta metodología no era completamente
eficiente.
Actualmente, el esquema de certificación enfoca
la amenaza a las computadoras empresariales. Para ser
certificado, el producto debe pasar las siguientes
pruebas:
- Debe detectar el 100% de los virus encontrados
comúnmente. La lista de virus comunes es actualizada
periódicamente, a medida que nuevos virus son
descubiertos. - Deben detectar, como mínimo, el 90% de la
librería de virus del NCSA (más de 6.000
virus)
Estas pruebas son realizadas con el producto
ejecutándose con su configuración "por
defecto".
Una vez que un producto ha sido certificado, la NCSA
tratará de recertificar el producto un mínimo de
cuatro veces. Cada intento es realizado sin previo aviso al
desarrollador del programa. Esta es una buena manera de
asegurar que el producto satisface el criterio de
certificación.
Si un producto no pasa la primera o segunda prueba, su
distribuidor tendrá siete días para proveer de la
corrección. Si este límite de tiempo es excedido,
el producto será eliminado de la lista de productos
certificados.
Una vez que se ha retirado la certificación a
un producto la única forma de recuperarla es que el
distribuidor envíe una nueva versión completa y
certificable (no se aceptará sólo una
reparación de la falla.
Acerca de la lista de virus de la NCSA, aclaremos que
ningún desarrollador de antivirus puede obtener una
copia. Cuando un antivirus falla en la detección de
algún virus incluido en la lista, una cadena
identificatoria del virus le es enviada al productor del
antivirus para su inclusión en futuras
versiones.
En el caso de los virus polimórficos, se
incluyen múltiples copias del virus para asegurar que el
producto testeado lo detecta perfectamente. Para pasar esta
prueba el antivirus debe detectar cada mutación del
virus.
La A. V. P. D. (Antivirus Product Developers,
Desarrolladores de Productos Antivirus) es una
asociación formada por las principales empresas
informáticas del sector, entre las que se
cuentan:
- Cheyenne Software
- I. B. M.
- Intel
- McAfee Associates
- ON Tecnology
- Stiller Research Inc.
- S&S International
- Symantec Corp.
- ThunderByte
- ALGUNOS ANTIVIRUS.
- DR. SOLOMON'S ANTIVIRUS TOOLKIT.
Certificado por la NCSA. Detecta más de 6.500
virus gracias a su propio lenguaje de
detección llamado VirTran, con una velocidad de
detección entre 3 y 5 veces mayor que los antivirus
tradicionales.
Uno de los últimos desarrollos de S&S es la
tecnología G. D. E. (Generic Decription
Engine, Motor de
Desencriptación Genérica) que permite detectar
virus polimórficos sin importar el algoritmo de
encriptación utilizado.
Permite detectar modificaciones producidas tanto en
archivos como en la tabla de partición del disco
rígido. Para ello utiliza Checksumms
Criptográficos lo cual, sumado a una clave personal de
cada usuario, hace casi imposible que el virus pueda descubrir
la clave de encriptación.
Elimina virus en archivos en forma sencilla y efectiva
con pocas falsas alarmas, y en sectores de buteo y tablas de
partición la protección es genérica, es
decir, independiente del virus encontrado.
Otras características que presenta este
antivirus, son:
- Ocupa 9K de memoria extendida o
expandida. - Documentación amplia y detallada en español y una enciclopedia sobre los
virus más importantes. - Actualizaciones mensuales o trimestrales de software
y manuales. - Trabaja como residente bajo Windows.
- A. H. A. (Advanced Heuristic Analysis, Análisis Heurístico
Avanzado). - NORTON ANTIVIRUS.
Certificado por la NCSA. Posee una protección
automática en segundo plano. Detiene
prácticamente todos los virus conocidos y desconocidos
(a través de una tecnología propia denominada
NOVI, que implica control de las actividades
típicas de un virus, protegiendo la integridad del
sistema), antes de que causen algún daño o
pérdida de información, con una amplia
línea de defensa, que combina búsqueda,
detección de virus e inoculación (se
denomina 'inoculación' al método por el cual este
antivirus toma las características principales de los
sectores de booteo y archivos para luego chequear su
integridad. Cada vez que se detecta un cambio en dichas
áreas, NAV avisa al usuario y provee las opciones de
Reparar – Volver a usar la imagen guardada
– Continuar – No realiza cambios – Inocular – Actualizar la
imagen.
Utiliza diagnósticos propios para prevenir
infecciones de sus propios archivos y de archivos
comprimidos.
El escaneo puede ser lanzado manualmente o
automáticamente a través de la
planificación de fecha y hora. También permite
reparar los archivos infectados por virus desconocidos. Incluye
información sobre muchos de los virus que detecta y
permite establecer una contraseña para aumentar
así la seguridad.
La lista de virus conocidos puede ser actualizada
periódicamente (sin cargo) a través de servicios
en línea como Internet, América On Line, Compuserve, The
Microsoft Network o el BBS propio de Symantec, entre
otros.
- VIRUSSCAN.
Este antivirus de McAfee Associates es uno de
los más famosos. Trabaja por el sistema de scanning
descripto anteriormente, y es el mejor en su estilo.
Para escanear, hace uso de dos técnicas
propias: CMS (Code Matrix Scanning, Escaneo de Matriz de
Código) y CTS (Code Trace Scanning, Escaneo de
Seguimiento de Código).
Una de las principales ventajas de este antivirus es
que la actualización de los archivos de bases de datos
de strings es muy fácil de realizar, lo cual, sumado a
su condición de programa shareware, lo pone al alcance
de cualquier usuario. Es bastante flexible en cuanto a la
configuración de cómo detectar, reportar y
eliminar virus.
En razón de lo expresado pueden extraerse
algunos conceptos que pueden considerarse necesarios para tener
en cuenta en materia de
virus informáticos:
- No todo lo que afecte el normal funcionamiento de una
computadora es un virus. - TODO virus es un programa y, como tal, debe
ser ejecutado para activarse. - Es imprescindible contar con herramientas de
detección y desinfección. - NINGÚN sistema de seguridad es 100%
seguro. Por eso todo usuario de computadoras debería
tratar de implementar estrategias de
seguridad antivirus, no sólo para proteger su propia
información sino para no convertirse en un agente de
dispersión de algo que puede producir daños
graves e indiscriminados.
Para implementar tales estrategias deberían
tenerse a mano los siguientes elementos:
- UN DISCO DE SISTEMA PROTEGIDO CONTRA ESCRITURA Y
LIBRE DE VIRUS: Un disco que contenga el sistema operativo
ejecutable (es decir, que la máquina pueda ser arrancada
desde este disco) con protección contra escritura y que
contenga, por lo menos, los siguientes comandos:
FORMAT, FDISK, MEM y CHKDSK (o SCANDISK en versiones recientes
del MS-DOS). - POR LO MENOS UN PROGRAMA ANTIVIRUS
ACTUALIZADO: Se puede considerar actualizado a un antivirus
que no tiene más de tres meses desde su fecha de
creación (o de actualización del archivo de
strings). Es muy recomendable tener por lo menos dos
antivirus. - UNA FUENTE DE INFORMACIÓN SOBRE VIRUS
ESPECÍFICOS: Es decir, algún programa,
libro o
archivo de texto que contenga la descripción,
síntomas y características de por lo menos los
cien virus más comunes. - UN PROGRAMA DE RESPALDO DE ÁREAS
CRÍTICAS: Algún programa que obtenga respaldo
(backup) de los sectores de arranque de los disquetes y
sectores de arranque maestro (MBR, Master Boot Record) de los
discos rígidos. Muchos programas antivirus incluyen
funciones de este tipo. - LISTA DE LUGARES DÓNDE ACUDIR: Una
buena precaución es no esperar a necesitar ayuda para
comenzar a buscar quién puede ofrecerla, sino ir
elaborando una agenda de direcciones, teléfonos y
direcciones electrónicas de las personas y lugares que
puedan servirnos más adelante. Si se cuenta con un
antivirus comercial o registrado, deberán tenerse
siempre a mano los teléfonos de soporte
técnico. - UN SISTEMA DE PROTECCIÓN RESIDENTE:
Muchos antivirus incluyen programas residentes que previenen
(en cierta medida), la intrusión de virus y programas
desconocidos a la computadora. - TENER RESPALDOS: Se deben tener respaldados en
disco los archivos de datos más importantes,
además, se recomienda respaldar todos los archivos
ejecutables. Para archivos muy importantes, es bueno tener un
respaldo doble, por si uno de los discos de respaldo se
daña. Los respaldos también pueden hacerse en
cinta (tape backup), aunque para el usuario normal es
preferible hacerlo en discos, por el costo que
las unidades de cinta representan. - REVISAR TODOS LOS DISCOS NUEVOS ANTES DE
UTILIZARLOS: Cualquier disco que no haya sido previamente
utilizado debe ser revisado, inclusive los programas originales
(pocas veces sucede que se distribuyan discos de programas
originales infectados, pero es factible) y los que se
distribuyen junto con revistas de
computación. - REVISAR TODOS LOS DISCOS QUE SE HAYAN
PRESTADO: Cualquier disco que se haya prestado a
algún amigo o compañero de trabajo, aún
aquellos que sólo contengan archivos de datos, deben ser
revisados antes de usarse nuevamente. - REVISAR TODOS LOS PROGRAMAS QUE SE OBTENGAN POR
MÓDEM O REDES: Una de las grandes vías de
contagio la constituyen Internet y los BBS, sistemas en los
cuales es común la transferencia de archivos, pero no
siempre se sabe desde dónde se está recibiendo
información. - REVISAR PERIÓDICAMENTE LA COMPUTADORA:
Se puede considerar que una buena frecuencia de análisis es, por lo menos,
mensual.
Finalmente, es importante tener en cuenta estas
sugerencias referentes al comportamiento a tener en cuenta
frente a diferentes situaciones:
- Cuando se va a revisar o desinfectar una computadora,
es conveniente apagarla por más de 5 segundos y arrancar
desde un disco con sistema, libre de virus y protegido contra
escritura, para eliminar virus residentes en memoria. No se
deberá ejecutar ningún programa del disco
rígido, sino que el antivirus deberá estar en el
disquete. De esta manera, existe la posibilidad de detectar
virus stealth. - Cuando un sector de arranque (boot sector) o de
arranque maestro (MBR) ha sido infectado, es preferible
restaurar el sector desde algún respaldo, puesto que en
ocasiones, los sectores de arranque genéricos utilizados
por los antivirus no son perfectamente compatibles con el
sistema operativo instalado. Además, los virus no
siempre dejan un respaldo del sector original donde el
antivirus espera encontrarlo. - Antes de restaurar los respaldos es importante no
olvidar apagar la computadora por más de cinco segundos
y arrancar desde el disco libre de virus. - Cuando se encuentran archivos infectados, es
preferible borrarlos y restaurarlos desde respaldos, aún
cuando el programa antivirus que usemos pueda desinfectar los
archivos. Esto es porque no existe seguridad sobre si el virus
detectado es el mismo para el cual fueron diseñadas las
rutinas de desinfección del antivirus, o es una
mutación del original. - Cuando se va a formatear un disco rígido para
eliminar algún virus, debe recordarse apagar la
máquina por más de cinco segundos y
posteriormente arrancar el sistema desde nuestro disquete
limpio, donde también debe encontrarse el programa que
se utilizará para dar formato al disco. - Cuando, por alguna causa, no se puede erradicar un
virus, deberá buscarse la asesoría de un experto
directamente pues, si se pidiera ayuda a cualquier aficionado,
se correrá el riesgo de
perder definitivamente datos si el procedimiento sugerido no es
correcto. - Cuando se ha detectado y erradicado un virus es
conveniente reportar la infección a algún
experto, grupo de investigadores de virus, soporte
técnico de programas antivirus, etc. Esto que en
principio parecería innecesario, ayuda a mantener
estadísticas, rastrear focos de
infección e identificar nuevos virus, lo cual en
definitiva, termina beneficiando al usuario mismo.
Samuel Alexander Escoto
Página anterior | Volver al principio del trabajo | Página siguiente |